我正在阅读CPP宏扩展,并希望在未提供(可选)令牌字符串时理解扩展.我发现gcc v4.8.4这样做:
$ cat zz.c
#define B
(B)
|B|
$ gcc -E zz.c
# 1 "zz.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "zz.c"
()
| |
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释为什么扩展在一个实例中是零空间而在另一个实例中是一个?
该程序将输出设为5.但是在替换所有宏之后,它将导致--5.这应该导致编译错误,试图减少5.但它编译并运行良好.
#include <stdio.h>
#define A -B
#define B -C
#define C 5
int main()
{
printf("The value of A is %d\n", A);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
为什么没有错误?