使用字符串化运算符将字符串值而不是const字符串文字传递给宏

时间:2014-08-25 17:39:15

标签: c++ string macros string-literals

我想将字符串值传递给名为TEST_FAIL的宏。我尝试了以下代码

string error = "myError";
TEST_FAIL(error.c_str());
TEST_FAIL("myError");

但是输出是

error.c_str()
"myError"

如何在两行中输入字符串error的第一行值,即"myError"

我使用来自库的宏来定义如下

#define TEST_FAIL(msg) \
{                                                               \
    assertment(::Test::Source(__FILE__, __LINE__, (msg) != 0 ? #msg : "")); \
    if (!continue_after_failure()) return;                      \
}

2 个答案:

答案 0 :(得分:1)

在宏内部,#{1}}之前的#是一个宏扩展,用于“表达”表达式(即将确切的表达式转换为字符串。有关详细信息,请参阅here。)

如果您想拥有#msg的值,只需删除#,如下所示:

msg

答案 1 :(得分:0)

宏中的#运算符将输入参数转换为字符串,因此传递error.c_str()将完全打印出来," error.c_str()"。有关详细信息,请参阅此处。

http://msdn.microsoft.com/en-us/library/7e3a913x.aspx