在阅读了一些 K&R 的 C 编程语言之后,我遇到了#define 符号常量。我决定定义...
#define INTEGER_EXAMPLE 2
#define CHAR_EXAMPLE 2
...所以我的问题是 C 如何知道我定义的是 int 还是 char 类型?
最佳答案
#define
-d 名称没有类型。他们只是定义文本替换。
编译器看到的是预处理后的形式。如果使用 GCC,请尝试 gcc -C -E somesource.c
并查看(预处理的)输出。
在 1980 年代,预处理器是一个单独的程序。
了解 cpp预处理器,和 preprocessor和 C preprocessor维基页面。
你甚至可以定义不明确的名字,比如
#define BAD @*?$ some crap $?
更可怕的是你可以定义语法不完整的东西,比如
#define BADTASTE 2 +
及以后的代码 BADTASTE 3
实际上,您希望在定义宏时使用括号。如果你有
#define BADPROD(x,y) x*y
然后 BADPROD(2+3,4+5)
被扩展为 2+3*4+5
编译器理解为 2+ (3 *4) +5
;你真的想要
#define BETTERPROD(x,y) ((x)*(y))
因此 BETTERPROD(2+3,4+5)
被扩展为 ((2+3)*(4+5))
避免宏参数中的副作用,例如BETTERPROD(j++,j--)
一般来说,谨慎使用宏并让它们保持简单。
关于c - C 中的符号常量(#define 语句),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19379353/