人们使用ifdef
控制是否应编译代码的哪一部分。通常将其放在一些include some_header
之后,该ifdef
定义或取消定义ifdef
中的事物。我看到一些代码(例如,MiBench中的 lame 测试用例),其中在源文件的开头有ListViewItem
,这使编译器忽略了整个源代码直接归档。谁能告诉我编写这样的代码有什么意义?
答案 0 :(得分:7)
文件amiga_mpega.c
以#ifdef AMIGA_MPEGA
开头,以相应的#endif
结尾。
如果未定义宏AMIGA_MPEGA
,则该文件对编译器显示为“空”。
如果编译的文件实际上不想包含在正在构建的程序中,则可以执行此操作。
有意义的一种(不同的)情况是,您以某种目录下的所有C文件都被编译的方式设置了项目。但是,在某些情况下,您不希望项目中包含所有C文件。
您的项目可能被编写为可用于不同的操作系统,并且某些C文件仅适用于特定的操作系统。
在Makefile(或使用的任何构建工具)中使用编译器开关(-DAMIGA_MPEGA
)选择是否要编译C文件。如果您不想编译C文件,则无论如何都会编译C文件,但是由于#ifdef
,C文件对编译器而言是空的,因此C文件的实际内容不包含在程序中。