在宏#之前做什么?

时间:2019-03-27 14:47:16

标签: c

我需要对此代码进行一些解释

#define TRACE_PRINT5 (F, X)   fprintf(stderr, "%s" STRGY(__LINE__) ":(" #X "): ", X);

我知道#在开始时有什么作用,但我不了解":(" #X"): "上的作用

2 个答案:

答案 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”

相关问题