编译器检查以确保我在裸机运行而不是在托管环境中运行

时间:2016-11-30 18:06:33

标签: c compilation cross-compiling bare-metal

如果我正在为裸机编译C程序,我知道我可以插入像

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

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

1 个答案:

答案 0 :(得分:1)

如果您想确定使用-ffreestanding构建,请在代码中检查__STDC_HOSTED__宏。普通代码将设置为1,独立构建设置为0。

请参阅GCC信息页面或文档。相关的引用是

  

默认情况下,它充当托管的编译器   实施,定义' STDC_HOSTED '作为' 1'并假设   当使用ISO C函数的名称时,它们具有语义   在标准中定义。使其成为一个符合标准的独立式   实现独立环境,使用该选项   ' -ffreestanding&#39 ;;然后定义' STDC_HOSTED '到' 0'并没有   从标准中对函数名称的含义做出假设   图书馆,下面有例外情况。