2015-09-05 98 views

回答

11

不,它们是不同的。

#define A; 

A;是两个不同的令牌。 A是宏名称,;是它的定义。所以你可以,如果你真的想,写:

printf("Hello, world\n")A 

,这将是相当于

printf("Hello, world\n"); 

(但请不要这么做。)

由于唯一A是指在#ifdef中,你所做的只是测试它是否已被定义,不管如何定义。分号无关紧要,因为您不使用分号。

正如风格和清晰度的问题,你应该始终有一个宏的名称及其定义之间的空间:

#define A ; 

这是,如果扩张的第一个标记是(角色尤为重要。如果它紧跟在宏名称之后,那么就有一个类似于函数的宏定义(宏需要参数)。如果宏名称和(之间有空格,(只是宏扩展的一部分。

说到分号,一个常见的错误是包括宏定义不必要分号:

#define THE_ANSWER 42; 

... 

printf("The answer is %d\n", THE_ANSWER); 

由于分号是宏定义的一部分,这将扩展为:

printf("The answer is %d\n", 42;); 

这是一个语法错误。

+0

你有没有mesn printf(“答案是%d \ n”,42;);'最后一个例子? –

+0

@EnzoFerber:的确如此,谢谢! –

+0

@凯瑟汤普森为什么A;将不会被视为一个整体的宏名称? – Renjie