Директивы компилятора C с инструкциями switch / case? - PullRequest
0 голосов
/ 26 октября 2011

Что мне делать с этим оператором switch-case в C ?

#if defined MY_CONST && define RUN_TEST
    case TX_ERROR:
        //code here
        break;
    case RX_ERROR:
        //other code here
        break;
#endif

Я пишу код в существующем проекте и вижу вышеупомянутые строки во включенном заголовкефайл (в файле, над которым я работаю).Никаких упоминаний о «переключателе» где-либо еще в заголовочном файле!

Я никогда раньше такого не видел!Как это могут быть переключатели корпуса без переключения?Поскольку это должно быть возможно, как я могу использовать эти случаи в операторе switch в моем главном файле?

РЕДАКТИРОВАТЬ: я не могу опубликовать фактический файл (код базы по лицензии?), Но вот урезанная версия:

#if defined _CONFIG
    #define MY_CONST
    #define MY_INIT
    #define RUN_TEST

    static void fnInit(void);
    static void fnGo(void);
#endif

#if defined MY_CONST && define RUN_TEST
    case TX_ERROR:
        //code here
        break;
    case RX_ERROR:
        //other code here
        break;
#endif

#if defined MY_INIT && defined MY_CONST
static void fnInit(void)
{
    //code
}

static void fnGo(void)
{
    //code
}
#endif

1 Ответ

3 голосов
/ 26 октября 2011

Убедитесь, что MY_CONST никогда не определяется!

Если то, что вы цитируете, является точным, то вам нужно будет включить заголовок в область действия оператора switch для результата с MY_CONST определены, чтобы иметь какой-либо смысл.Если он не встроен в макрос, то это просто несчастный случай, ожидающий наступления.


С измененным содержимым убедитесь, что вы никогда не определили как MY_CONST, так и RUN_TEST.Невозможно использовать заголовок разумно, если он есть - даже если вы используете GCC и включили вложенные функции.

По сути, этот фрагмент является ошибкой в ​​заголовке.

...