我有一些我想要更改的C代码,但我想使用#ifdef
以便可以编译旧的目标文件(后预处理代码不会有改变)。出于某些原因(针对多个平台进行编译以及认证原因),我需要保持目标文件相同(除了任何时间戳)。
C语言规范或任何C编译器是否对重新编译有任何保证?我一直在做一些谷歌搜索,但我还没有找到关于这个主题的任何内容。
例如:
的main.c
int main() {
printf("Hello World!\n");
return 0;
}
main.h(新文件)
#ifdef DEBUG
char some_buffer[1000];
#define PRINTF(S) (sprintf(some_buffer, S))
#else
#define PRINTF(S) (printf(S))
#endif
main.c(更新文件)
#include "main.h"
int main() {
PRINTF("Hello World!\n");
return 0;
}
如果我要使用DEBUG 而不是定义更新的main.c,现在包含main.h,C语言规范或任何C编译器是否保证目标文件将是一样吗?
答案 0 :(得分:5)
C语言不保证对象文件。甚至工具链也不一定会有像目标文件那样的东西。具体的编译器可能会有一些关于它们自己的目标文件的规则,但它们可能会或可能没有特别好的文档记录。
无论如何,如果你已经有了一个你需要的特定目标文件,为什么你如此关心能够重新创建它呢?如果你想构建一个旧版本的软件,你不能只在需要构建它时从版本控制中检出,而不必在同一个地方的每个版本中混淆源代码吗?