使用粘贴运算符`##`和C中的类型

Osc*_*les 3 c macros typeof

是否可以为C预处理器定义一个宏,它将数组作为参数并扩展为<type of array elements>_string?例如,如果x在整数数组中,使用参数调用的宏x应扩展为int_string.

我试过了

#define TypePaste(array) typeof(array[0])##_string
Run Code Online (Sandbox Code Playgroud)

但它扩展到)_string.

即使对##操作数使用多个间接级别,宏也不能正确扩展.

fuz*_*fuz 6

那是不可能的.在扩展宏并且标记连接的转换阶段(预处理阶段),编译器(此时,预处理器)还没有类型的概念,因此不可能生成类型.

  • @OscarCharles不,没有.如果你想做类似的事情,你必须编写一个自定义代码生成器.如果你通过这样做问你想解决的问题,也许我们可以找到一个不同的解决方案. (3认同)
  • 预处理是几个编号的翻译阶段之一,特别是阶段4(C11§5.1.1.2). (2认同)