包含与主C文件位于同一文件夹中的C文件

时间:2019-01-15 10:06:13

标签: c preprocessor-directive

我有一个包含3个文件的文件夹:

  • main.c
  • file1.c
  • file2.c

想法是,仅根据符号编译一个文件(如果未定义)。

在main.c中,我添加了以下几行:

#ifdef MY_SYMBOL
 #include "file1.c"
#else
 #include "file2.c"
#endif

我发现的问题是,当定义 MY_SYMBOL 时, file1.c 被编译了两次,因为在makefile中提到了它会编译每个文件夹中的所有源文件。

限制是我不应该修改Makefile!因此,为避免这种情况,我将 file1.c file2.c 的扩展名修改为 file1.h file2.h < / strong>,分别保留它们的内容(所有私有函数的定义),然后按以下方式更新main.c的内容:

#ifdef MY_SYMBOL
 #include "file1.h"
#else
 #include "file2.h"
#endif

考虑到上述限制,最后的建议是最好的方法吗?

请注意, file1.c file2.c 包含相同的功能,但实现方式不同。

1 个答案:

答案 0 :(得分:1)

在其他情况下,C程序员通常不期望以下之一:

  1. .h文件,其中包含函数实现或变量定义
  2. .c文件包含在内。

所以我会用两种方式说出,您将以某种方式“使”其他人“惊讶”。

如果一定不要更改$(function(){ $('.ui.button').click(function(){ showmodal() }) function showmodal() { $('.ui.modal').modal('show'); } if ($('.ui.dropdown').length) { $('.ui.dropdown').dropdown({ showOnFocus: false }); } }) (顺便说一句,为什么?),则可以将实现变体封装在makefile文件中的预处理指令中:

.c

此外,您将需要一个头文件,该文件声明相应实现公开的所有功能。