【发布时间】:2019-03-27 14:47:16
【问题描述】:
我需要一些关于这段代码的解释
#define TRACE_PRINT5 (F, X) fprintf(stderr, "%s" STRGY(__LINE__) ":(" #X "): ", X);
我知道#开头是什么,但我不明白":(" #X"): "是什么
【问题讨论】:
标签: c
我需要一些关于这段代码的解释
#define TRACE_PRINT5 (F, X) fprintf(stderr, "%s" STRGY(__LINE__) ":(" #X "): ", X);
我知道#开头是什么,但我不明白":(" #X"): "是什么
【问题讨论】:
标签: c
这叫"stringizing";当您添加# 时,宏会将参数视为字符串(例如,获取传入事物的名称,而不是值。)
例如,如果你写:
const char* someString = "abc";
TRACE_PRINT5(something, someString); // let's assume this is on line 10 for __LINE__
这应该扩展为:
const char* someString = "abc";
fprintf(stderr, "%s" "10" ":(" "someString" "): ", "abc");
(假设STRGY 宏只是将其参数转换为字符串。)
【讨论】:
当您将# 放在宏中的某个内容之前时,它会以字符串文字的形式获取值。
在您的情况下,将 X 作为字符串文字。
这意味着如果你传递变量age 类型为int 它将传递把“年龄”放在#X 的位置
【讨论】: