Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用字符串化运算符将字符串值而不是常量字符串文字传递给宏_C++_String_Macros_String Literals - Fatal编程技术网

C++ 使用字符串化运算符将字符串值而不是常量字符串文字传递给宏

C++ 使用字符串化运算符将字符串值而不是常量字符串文字传递给宏,c++,string,macros,string-literals,C++,String,Macros,String Literals,我想将字符串值传递到一个名为TEST\u FAIL的宏中。我尝试了以下代码 string error = "myError"; TEST_FAIL(error.c_str()); TEST_FAIL("myError"); 但这一结果是错误的 error.c_str() "myError" 如何才能在两行中输入字符串error的第一行值,即“myError” 我使用库中的宏,定义如下 #define TEST_FAIL(msg) \ {

我想将字符串值传递到一个名为
TEST\u 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;                      \
}
在宏内部,#before
#msg
是一个宏扩展,用于“字符串化”表达式(即,将精确表达式转换为字符串。有关详细信息,请参阅)

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

#define TEST_FAIL(msg) \
{                                                               \
    assertment(::Test::Source(__FILE__, __LINE__, (msg) != 0 ? msg : "")); \
    if (!continue_after_failure()) return;                      \
}
宏中的#运算符将输入参数转换为字符串,因此传递error.c_str()将准确打印“error.c_str()”。详情请参见此处


c预处理器在编译之前运行,当然不能替换运行时获得的任何值。我希望在不更改
TEST\u FAIL
宏的情况下执行此操作,因为这是在外部库中定义的。这可能吗?宏操作是在编译之前完成的。因此,此时编译器不知道error的实际值(即“myError”)。恐怕你不能不改变考试不及格就这样做。但是,您仍然可以使用固定的代码定义自己的宏。宏就像源代码的类固醇上的“复制粘贴”。但它仍然在源代码中,而不是在执行时。因此,附加的宏或函数将不会有帮助!可能,唯一的选择是使用当前字符串值生成类并在运行时编译它。在发布之前我已经看到了这一点,但我仍然不知道如何将字符串值传递给这个宏。