一般来说,我已经阅读了以下文章,检查了 gcc 语言标准中的“独立/托管”定义,但还没有解决我的疑问。
https://gcc.gnu.org/onlinedocs/gcc/Standards.html
https://gcc.gnu.org/onlinedocs/gcc/C-Dialect-Options.html
我在 Win7 中使用托管的 gcc/cygwin。我发现生成的 .out、.map 或 .exe 文件对于使用 -ffreestanding 和不使用 -ffreestanding 的不同构建是相同的。
C文件(test.c):
#include <stdio.h>
int main(int ac, char **av)
{
printf("test1");
return 0;
}
下面列出了 2 个不同构建的命令行:
gcc test.c -o test1.exe -std=gnu99 -O2 -Wall -Wextra -Wl,-Map,test1.map
gcc test.c -o test2.exe -std=gnu99 -ffreestanding -O2 -Wall -Wextra -Wl,-Map,test2.map
test1.exe 和 test2.exe 都可以通过构建并在运行时打印“test1”。但我曾认为使用 -ffreestanding 编译可能会由于“找不到 stdio 头”、“不包含标准库”或“找不到 printf 实现”而失败。
似乎即使使用 -ffreestanding 选项,托管的 gcc 也不能作为独立的 gcc 工作。
谁能帮忙澄清一下?为什么添加独立选项后 printf 功能仍然可用?