gpt4 book ai didi

c++ - c/c++ (VS2008) 将宏参数用引号引起来

转载 作者:可可西里 更新时间:2023-11-01 15:56:02 24 4
gpt4 key购买 nike

对于需要一定程度调试的 C 应用程序中的大量函数调用,我想添加一个宏来简化我必须执行的输入操作。

现在我正在调用这样的函数:

aDebugFunction(&ptrToFunction, __LINE__, "ptrToFunction", param1, param2, etc)

所以我想让我们写一个宏来为我处理前 3 个参数,如下所示:

#define SOMEDEFINE(x) &x, __LINE__,  "x"

但是,正如你们中的大多数人马上就会知道的那样,这是行不通的,因为它不会将“x”替换为给定的 x 名称,而是将“x”作为第三个参数传递。

我对这个预处理器宏发生的事情的了解非常有限,因此我的谷歌搜索能力也很无用,因为不知道在哪里搜索。

我希望你们中的任何一个能给我一个解决方案或者给我指明正确的方向。

最佳答案

您需要使用预处理器的# convert token to string 命令。你应该这样定义你的第二个宏:

#define SOMEDEFINE(x) &x, __LINE__,  # x

或者如果x也可以是宏调用,而你想让字符串包含宏的扩展,就需要使用辅助宏:

#define TOKEN_TO_STRING(TOK) # TOK
#define STRINGIZE_TOKEN(TOK) TOKEN_TO_STRING(TOK)
#define SOMEDEFINE(x) &x, __LINE__, STRINGIZE_TOKEN(x)

例如,如果您有以下代码:

#define SHORT_NAME a_very_very_very_long_variable_name
SOMEDEFINE(SHORT_NAME)

然后,使用第一个宏,它将扩展为

&a_very_very_very_long_variable_name, __LINE__, "SHORT_NAME"

而对于第二个宏,它将扩展为:

&a_very_very_very_long_variable_name, __LINE__, "a_very_very_very_long_variable_name"

关于c++ - c/c++ (VS2008) 将宏参数用引号引起来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5166322/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com