Я получаю сообщение об ошибке типа «ожидаемый идентификатор» при попытке использовать макросы в моем коде - PullRequest
0 голосов
/ 30 декабря 2018

Я написал макрос, но когда я использую код, я получаю ожидаемую ошибку идентификатора.

Ниже мои макросы

#define ITK(arguments)  \
{                       \
    int iFail=0;        \
    iFail = arguments;  \
    if(iFail != ITK_ok) \
{                      \
    char* s;            \
    TC_write_syslog("Following Method Retruns error "#arguments "\n");\
    TC_write_syslog("Error is in the line [%d] of the file ["__FILE__"]\n",[__LINE__]);\
    EMH_ask_error_text(iFail,&s);\
    TC_write_syslog("And the error is [%s]",s);\
    if(s!=0) MEM_FREE(s);\
}                           \
}

Ответы [ 2 ]

0 голосов
/ 30 декабря 2018

Выглядит как простая опечатка для меня.Вам необходимо удалить [ и ] здесь:

TC_write_syslog("Error is in the line [%d] of the file ["__FILE__"]\n",[__LINE__]);
//                                                                     ^        ^

Обратите внимание, что вместо использования printf's %d для вставки __LINE__ в строку во время выполнения вы можете преобразовать __LINE__ к строковому литералу во время компиляции:

#define STR(x) STR_(x)
#define STR_(x) #x
TC_write_syslog("Error is in the line " STR(__LINE__) " of the file ["__FILE__"]\n");
0 голосов
/ 30 декабря 2018

Как сказал Дэвис Херринг, причина в том, что вы [__LINE__]

Когда вы потерялись и не видите, где находится ошибка в таком случае, посмотрите на код после предварительной обработки, например, используя g ++ do g++ -E < other flags except -c > -o temp.cc и, если вы все еще не видите в temp.cc , добавьте разрывы строк в интересующей части кода в temp.cc , затем скомпилируйте temp.cc для просмотра ошибок / предупреждений компилятора

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...