2017-01-11 15 views
-6

для следующего кода мы можем рассматривать '#define' как токен?Можно ли рассматривать директивы препроцессора как токен?

#define int char 
main(){ 
    int i=65;    // i is initialized 
    printf("sizeof(i)=%d",sizeof(i)); 
} 
+0

Я голосующий, чтобы отвечать на этот вопрос не по теме, потому что домашняя работа должна быть предпринята –

+0

извините, но это не вопрос домашней работы. –

+0

это 2 препроцессорных токена, '#' и 'define' –

ответ

1

Стандарт ISO C явно вызывает, что существуют маркеры, например, в c11 6.4:

token: 
    keyword 
    identifier 
    constant 
    string-literal 
    punctuator 
preprocessing-token: 
    header-name 
    identifier 
    pp-number 
    character-constant 
    string-literal 
    punctuator 
    each non-white-space character that cannot be one of the above 

Таким образом, нет, #define это не знак, это две лексемы предварительной обработки, # и идентификатор define.

Это идентификатор согласно 6.4.2.1, где он определен как в основном [_A-Za-z][_A-Za-z0-9]*.