【发布时间】:2013-07-31 23:50:06
【问题描述】:
如果遇到此声明 multiple times 并且无法弄清楚它应该是什么意思。由于生成的代码是使用常规 C 编译器编译的,因此最终会像任何其他代码一样多(或少)进行类型检查。
那么为什么宏不是类型安全的?这似乎是他们应该被视为邪恶的主要原因之一。
【问题讨论】:
-
重点是C编译器不处理宏定义。预处理器处理它们
-
嗯,是的,但是如果生成的代码实际上违反了类型系统,编译器会捕捉到它。
-
C++FAQ 详细介绍了为什么宏在这里是邪恶的:parashift.com/c++-faq-lite/inline-vs-macros.html
-
@Sarien: "...如果生成的代码实际上违反了类型系统,编译器会捕捉到它。" 你是绝对正确的。此外,我想说“宏不是类型安全的”这句话没有意义,因为没有人认为它们是类型安全的,因为它们只是 C 语言的助手,而不是 C 语言的组成部分它。
-
Broad 声称宏不是类型安全的说法来自没有考虑过的人。
#define NUM_REPS 3是类型安全的;NUM_REPS扩展为3,其类型为int。正如一些答案所暗示的那样,如果您没有考虑过它们的作用,类似函数的宏会产生令人惊讶的结果;这是否上升到不“类型安全”的程度取决于您所说的“类型安全”的确切含义。