2015-06-27 3 views
0

Для следующего кода я получаю выходные данные как Geeks.Вывод следующих макросов кода в c

#include <stdio.h> 
#define ISEQUAL(X, Y) X == Y 
int main() 
{ 
    #if ISEQUAL(X, 0) 
     printf("Geeks"); 
    #else 
     printf("Quiz"); 
    #endif 
    return 0; 
} 

Объясните причину такого выхода.

+1

Примечание: вы должны ** всегда ** вставлять макрокоманды в тело. В противном случае вы можете получить неправильные результаты из-за превышения _operator_. Их часто довольно сложно найти. – Olaf

ответ

5

Условный макрос #if ISEQUAL(X, 0) расширен до #if X == 0. После завершения предварительной обработки все неопределенные макросы инициализируются значением по умолчанию 0. Поскольку макрос X не определен, он инициализируется 0. Итак, печатаются «Geeks».

+1

«После завершения предварительной обработки ...» Ну, после предварительной обработки ничего больше не делается с помощью макросов. Если 'X' не определяется, когда вычисляется' # if', оно просто считается '0', но не« инициализировано »(которое фактически определяло бы его) – Olaf

Смежные вопросы