【发布时间】:2017-08-29 20:41:17
【问题描述】:
是否必须在程序顶部和main函数之外编写#include?
我尝试在 main 函数中使用 #define 预处理器,它工作正常,只有一个异常..我使用 define 指令定义的常量只能在 #define 行之后使用
例如说printf("%d",PI); #define PI 3.14将给出错误“未定义的符号PI”。但是在下面的代码中我没有遇到任何错误
#define PI 3.14
printf("%d",PI);
这是因为 C 是一种过程语言并且过程语言实现了自上而下的方法吗?
我也想知道我们是否也可以在主函数或其他预处理器指令中只使用#define?如果我们可以使用那么哪些? 或者是相反的方式,而不是#include,我们可以在主函数中使用所有预处理器指令?
【问题讨论】:
-
"以下代码我没有遇到任何错误" --> 代码正在尝试使用
"%d"打印double--> UB。启用所有编译警告。 -
请注意,C 标准(我相信 POSIX 标准)要求它们定义的标头必须包含在文件范围内,而不是在外部声明范围内(函数,或在变量声明)。你可以在任何你喜欢的地方使用
#include和你自己的标题;您有责任使其正常工作。如果您的标头包含系统标头,那么您毕竟必须遵守文件范围规则。请注意,尽管包含通常位于文件的顶部,但这不是必需的。 -
如果您将代码修复为
#define PI 3.14 printf("%f",PI);,问题仍然是为什么顺序很重要。然后是程序问题。
标签: c c-preprocessor