C语言中“#@”的用法是什么?

时间:2018-11-13 12:47:22

标签: c c-preprocessor

# 符号在预处理器指令(#ifdef#define等)的开头使用。 #也用作字符串化运算符。

## 是令牌粘贴运算符。

然后在一个在线测验中我看到了:

#define MAKECHAR(operand) #@operand

#@ 是什么运算符,它的作用是什么?

1 个答案:

答案 0 :(得分:6)

它类似于字符串化标记#,但对于字符来说却是标准化的。例如,clang / llvm不支持它。

以此类推:

#define MESSAGE(x) printf("%s: %d\n", #x, x)

int main(){
    int i = 5;
    MESSAGE(i); // expands to printf("%s: %d\n", "i", x)
    return 0;
}

输出为:

i: 5

使用支持#@的编译器,您可以编写:

#define MESSAGE(x) printf("%c: %d\n", #@x, x)

int main(){
    int i = 5;
    MESSAGE(i);  // expands to printf("%c: %d\n", 'i', x)
    return 0;
}