我可以在我的 c 程序中的任何地方编写预处理器指令吗?

Gir*_*ora 3 c c-preprocessor

是否必须在程序顶部和主函数之外编写#include?

我尝试在 main 函数中使用 #define 预处理器,它工作正常,只有一个例外......这是我使用define指令定义的常量只能在#define行之后使用例如说printf("%d",PI); #define PI 3.14会给出错误“未定义符号PI ”。但是在下面的代码中我没有遇到任何错误

#define PI 3.14 
printf("%d",PI);
Run Code Online (Sandbox Code Playgroud)

这是因为 C 是一种过程语言并且过程语言实现了自上而下的方法吗?

另外我想知道我们可以在主函数或其他预处理器指令中只使用 #define 吗?如果我们可以使用,那么哪些?或者相反,我们可以使用 main 函数中的所有预处理器指令代替 #include ?

o11*_*11c 5

唯一不能放置预处理器指令的地方是宏扩展。唯一的例外是#pragma,这也可以写_Pragma()

这与“程序化”无关,但由于 C 是根据 8 个翻译阶段定义的,每个翻译阶段在下一阶段之前“好像”完全完成。有关更多详细信息,请参阅 C11 标准的第 5.1.1.2 节。


在文件开始后使用预处理器指令很有用的一个例子是“X 宏”技术(许多人只知道它是“那些.def文件”)。