gpt4 book ai didi

c - C 对目标文件有任何保证吗?

转载 作者:行者123 更新时间:2023-12-02 09:36:04 25 4
gpt4 key购买 nike

我有一些想要更改的 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 not 来编译更新后的 main.c(现在包含 main.h),C 语言规范或任何 C 编译器是否能保证目标文件将是一样吗?

最佳答案

C 语言对目标文件不做任何保证。甚至工具链也不一定有目标文件之类的东西。特定的编译器可能有一些关于它们自己的目标文件的规则,但它们可能有也可能没有特别详细的记录。

无论如何,如果您已经有了所需的特定目标文件,为什么您如此关心能否重新创建它呢?如果您想构建旧版本的软件,难道您不能在需要构建它时直接从修订控制中 checkout ,而不必将每个版本都放在同一个地方,从而使源代码变得困惑吗?

关于c - C 对目标文件有任何保证吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26149035/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com