相关疑难解决方法(0)

cpp扩展宏没有令牌字符串

我正在阅读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)

任何人都可以解释为什么扩展在一个实例中是零空间而在另一个实例中是一个?

c macros c-preprocessor

7
推荐指数
1
解决办法
207
查看次数

为什么这些连续的宏替换不会导致错误?

该程序将输出设为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)

为什么没有错误?

c macros

3
推荐指数
1
解决办法
98
查看次数

标签 统计

c ×2

macros ×2

c-preprocessor ×1