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

Jay*_*Jay -1 c

人们ifdef用来控制代码的哪一部分应该编译.它通常放在一些include some_header定义或取消定义的东西之后ifdef.我在源文件的开头看到了一些代码(例如,MiBench中蹩脚测试用例),这使得编译器直接忽略整个源文件.任何人都可以告诉我这样编写代码有什么意义吗?ifdef

Mar*_*nau 7

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

这会导致如果AMIGA_MPEGA未定义宏,则文件对编译器显示为"空" .

如果您编译的文件在您正在构建的程序中实际上不希望拥有该文件,则可以执行此操作.

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

您的项目可能会编写为适用于不同的操作系统,而某些C文件仅适用于某个操作系统.

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