我们可以将预处理器指令视为令牌吗?

Can we consider preprocessor directives as token?

对于下面的代码,我们可以把'#define'当作token吗?

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

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]*