如何在编译时检查标志的存在?

时间:2011-09-09 07:53:00

标签: c c-preprocessor

我使用-LITTLE标志来选择 little endian 计算和
编译时我的项目中的 big endian 计算-BIG

#ifdef LITTLE   
   {    
    // i'm using i for operating one loop 
   }
   #endif

 /* If the system is big-endian, store bytes in array as forward order */
#ifdef  BIG 
   {
   // using i for loop
   }
   #endif

喜欢

gcc -LITTLE my_c_file.c

我想检查用户是否在编译时没有给出任何标志,然后编译没有发生并给出错误。

我该怎么做?

3 个答案:

答案 0 :(得分:9)

我认为你的意思是gcc -DLITTLE

您可以使用以下内容:

#if !defined(LITTLE) && !defined(BIG)
#error either LITTLE or BIG must be defined
#endif

猜测,你可能也想要:

#if defined(LITTLE) && defined(BIG)
#error only one of LITTLE or BIG must be defined
#endif

当然,如果你能编写的代码不关心你正在运行的机器的字节顺序并避免整个混乱,那就更好了。

答案 1 :(得分:2)

尝试

#if !defined(LITTLE) && !defined(BIG)
#error "Either LITTLE or BIG has to be defined"
#endif

答案 2 :(得分:1)

您可以自动检测平台的字节性别。请参阅boost/detail/endian.hpp