我需要对此代码进行一些解释
#define TRACE_PRINT5 (F, X) fprintf(stderr, "%s" STRGY(__LINE__) ":(" #X "): ", X);
我知道#在开始时有什么作用,但我不了解":(" #X"): "
上的作用
答案 0 :(得分:4)
这称为"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
宏只是将其参数转换为字符串。)
答案 1 :(得分:2)
当您将#
放在宏中的某项之前时,它将获得作为字符串文字的值。
在您的情况下,将X
作为字符串文字。
这意味着,如果您通过类型age
传递变量int
,它将在#X
的位置传递put“ age”