#
符号用于预处理指令的开头(如#ifdef
,#define
等)。#
还用作字符串化运算符。
##
是标记粘贴运算符。
之后我在一个在线测验中看到了这个:
#define MAKECHAR(operand) #@operand
运算符
#@
是什么,它用于什么?#
符号用于预处理指令的开头(如#ifdef
,#define
等)。#
还用作字符串化运算符。
##
是标记粘贴运算符。
之后我在一个在线测验中看到了这个:
#define MAKECHAR(operand) #@operand
#@
是什么,它用于什么?这是一个类比于 stringify 标记 #
但针对字符的概念,但它并没有被标准化。例如,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;
}
#@
这样的东西。 - Lundin@
在 C 语言中有任何含义。我会认为这是一种专有扩展。如果是这样,应该在相应的 C 编译器文档中有所记录。 - Scheff's Cat#
的“字符化”操作符#@
。 - M Oehm