在C的符号常数在编译时或运行时定义?
请告诉我符号常数之间的差:VS常量变量
int const GOKU = 9111;
在C的符号常数在编译时或运行时定义?
请告诉我符号常数之间的差:VS常量变量
int const GOKU = 9111;
最明显的区别
#define GOKU 9111
是,#定义由预处理器处理,而常数是由编译器处理。它们都不是在运行时定义的。当使用#define时,文本GOKU将在您的源代码中用9111替换,之后编译器将完成其工作。
预处理器常量仅在编译之前就已存在。事实上,它们都是在预处理过程中解决的,并且(如果您想),您只能执行预处理并查看结果。
常变量,而另一方面,留在编译的程序,因此可以在连接阶段找到了。例如,您可以在另一个文件中定义“extern int const GOKU”,然后将它与第一个文件链接在一起访问GOKU。
请注意,如果你尝试过包括常量变量文件,它可能导致错误,如“符号GOKU定义multiplie倍”。
在可见性方面也存在差异。虽然常量变量遵循嵌套命名空间的规则(即例如:如果它是全局的,它将在文件中随处可见,但它可以在任何代码块中重新定义),预处理常量可以从它所在的行可见被定义为未定义的行(或文件结尾)。当然,您可以取消定义(使用#undef)或重新定义(使用另一个#定义)它。
还有的代码是如何编制的问题。使用第一个GOKU会导致代码更快一些,指令中会生成正弦数字符号。使用第二个GOKU会导致代码慢一点,因为将间接指向变量放置在数据段中的位置。
这就是我可以立即召回。
速度是一样的。自己检查装配。 (另外,这是一个C问题,所以没有'::'运算符。) – 2011-05-16 06:46:25
我明白了。会做。 – Srv19 2011-05-16 06:53:23
'#define'最后不应该有分号。 – 2011-05-16 06:34:47
嗯,没有看到之前,投票关闭和合并的问题,thx – Saad 2011-05-16 06:51:56