2016-11-30 31 views
1

如果我编译一个C程序进行裸机,我知道我可以插入之类的东西编译器检查,以确保我在裸机上运行,​​而不是在托管环境

#if defined(__linux__) 
#error "You're not using a cross-compiler." 
#endif` 

但是,我不想检查每个操作系统。是否有一个检查,看看我是否在托管环境?

+0

你打算在baremetal上编译? –

+0

@ Jean-FrançoisFabre是的。为了清晰起见更新了问题 – Newtang

+1

我知道你编译_for_ baremetal,但是你打算运行编译器_on_ baremetal。可能不会。 –

回答

1

如果您想确定您正在使用-ffreestanding进行编译,请将代码检查为__STDC_HOSTED__宏。对于普通代码它将被设置为1,对于独立编译将它设置为0。

查看GCC信息页面或文档。相关报价

默认情况下,它作为编译器对东道主 实施,界定“STDC_HOSTED”为“1”,并假设该 时使用的ISO C函数的名字,他们有标准中定义的语义 。要使其充当独立环境的符合独立式 实施,请使用选项 '-freestanding';然后它将'STDC_HOSTED'定义为'0',而不是 对来自标准 库的函数名的含义做出了假设,但有以下例外情况。

相关问题