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

时间:2017-01-11 05:01:52

标签: c token lexer

对于以下代码,我们可以将'#define'视为令牌吗?

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

1 个答案:

答案 0 :(得分: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标识符。< / p>

根据6.4.2.1标识符,其标识符基本为[_A-Za-z][_A-Za-z0-9]*