尝试在代码中使用宏时,出现“期望的标识符”之类的错误

时间:2018-12-30 08:39:07

标签: c++ c++11

我已经写了一个宏,但是当我使用代码时,我得到了预期的标识符错误。

下面是我的宏

#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 :(得分:0)

正如戴维斯·赫林(Davis Herring)所说,原因是您的float values[4] { 0.f, 1.f, 0.f, 1.f }; unsigned int texId; glGenTextures(1, &texId); glBindTexture(GL_TEXTURE_2D, texId); // set filter and wrap glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); // copy values glTexImage2D(GL_TEXTURE_2D, 0, GL_R32F, 2, 2, 0, GL_RED, GL_FLOAT, values);

当您迷路并且看不到这种情况下的错误在哪里时,请查看预处理后的代码,例如,使用 g ++ 执行[__LINE__],如果您仍然看不到 temp.cc temp.cc 中有趣的代码部分添加换行符,然后编译 temp.cc 进行查找在编译器错误/警告时

答案 1 :(得分:0)

在我看来像是一个简单的错字。您需要在此处删除[]

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

请注意,您可以在编译时将%d转换为字符串文字,而不是在运行时使用printf的__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");