将`ifdef`放在源文件的第一行有什么意义?

时间:2019-03-02 15:47:27

标签: c

人们使用ifdef控制是否应编译代码的哪一部分。通常将其放在一些include some_header之后,该ifdef定义或取消定义ifdef中的事物。我看到一些代码(例如,MiBench中的 lame 测试用例),其中在源文件的开头有ListViewItem,这使编译器忽略了整个源代码直接归档。谁能告诉我编写这样的代码有什么意义?

1 个答案:

答案 0 :(得分:7)

文件amiga_mpega.c#ifdef AMIGA_MPEGA开头,以相应的#endif结尾。

如果未定义宏AMIGA_MPEGA,则该文件对编译器显示为“空”。

如果编译的文件实际上不想包含在正在构建的程序中,则可以执行此操作。

有意义的一种(不同的)情况是,您以某种目录下的所有C文件都被编译的方式设置了项目。但是,在某些情况下,您不希望项目中包含所有C文件。

您的项目可能被编写为可用于不同的操作系统,并且某些C文件仅适用于特定的操作系统。

在Makefile(或使用的任何构建工具)中使用编译器开关(-DAMIGA_MPEGA)选择是否要编译C文件。如果您不想编译C文件,则无论如何都会编译C文件,但是由于#ifdef,C文件对编译器而言是空的,因此C文件的实际内容不包含在程序中。