Как я могу проверить наличие флага во время компиляции? - PullRequest
1 голос
/ 09 сентября 2011

Я использую флаг -LITTLE для выбора вычисления little-endian и вычисления
-BIG для big endian в моем проекте при компиляции.

#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 ]

9 голосов
/ 09 сентября 2011

Я думаю, что вы имеете в виду 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

Конечно, было бы лучше, если бы вы могли написать код, который не заботится о порядке байтов, на котором вы работаете, и избегаете всего беспорядка.

2 голосов
/ 09 сентября 2011

Попробуйте

#if !defined(LITTLE) && !defined(BIG)
#error "Either LITTLE or BIG has to be defined"
#endif
1 голос
/ 09 сентября 2011

Вы можете определить байтовый пол платформы автоматически.См. boost / detail / endian.hpp .

...