1
如果我编译一个C程序进行裸机,我知道我可以插入之类的东西编译器检查,以确保我在裸机上运行,而不是在托管环境
#if defined(__linux__)
#error "You're not using a cross-compiler."
#endif`
但是,我不想检查每个操作系统。是否有一个检查,看看我是否在托管环境?
如果我编译一个C程序进行裸机,我知道我可以插入之类的东西编译器检查,以确保我在裸机上运行,而不是在托管环境
#if defined(__linux__)
#error "You're not using a cross-compiler."
#endif`
但是,我不想检查每个操作系统。是否有一个检查,看看我是否在托管环境?
如果您想确定您正在使用-ffreestanding
进行编译,请将代码检查为__STDC_HOSTED__
宏。对于普通代码它将被设置为1,对于独立编译将它设置为0。
查看GCC信息页面或文档。相关报价
默认情况下,它作为编译器对东道主 实施,界定“STDC_HOSTED”为“1”,并假设该 时使用的ISO C函数的名字,他们有标准中定义的语义 。要使其充当独立环境的符合独立式 实施,请使用选项 '-freestanding';然后它将'STDC_HOSTED'定义为'0',而不是 对来自标准 库的函数名的含义做出了假设,但有以下例外情况。
你打算在baremetal上编译? –
@ Jean-FrançoisFabre是的。为了清晰起见更新了问题 – Newtang
我知道你编译_for_ baremetal,但是你打算运行编译器_on_ baremetal。可能不会。 –