- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我想知道这段代码输出背后的原因。我想不出答案。
#define f(a,b) a##b
#define g(a) #a
#define h(a) g(a)
void main()
{
printf("%s %s",h(f(1,2)),g(f(1,2)));
}
PS:输出为 12 f(1,2)
。我以为是 12 12
或 f(1,2) f(1,2)
。
最佳答案
h(f(1,2))
f(1,2)
替换为 a
。 a
不是 #
或 ##
运算符的主题,因此它被扩展为 12
。现在您有了 g(12)
,它扩展为 "12"
。
g(f(1,2))
f(1,2)
替换为 a
。应用于 a
的 #
运算符可防止宏扩展,因此结果实际上是 "f(1,2)"
。
关于C预处理器: stringize macro and identity macro,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11610111/
使用 Pelles C 我想显示或记录一个无符号字符数组。是否可以使用 stringize 宏将整个数组显示为十六进制值,而不是使用 printf(%x) 迭代数组? 最佳答案 没有。字符串化仅将指定
我有一些字符串常量,后面的常量部分由前面的组成 const char* ID = "01099BB2"; const char* FS_LOCATION_ROOT = "fs:/~0x"
至少一些 C 预处理器允许您将宏的值而不是它的名称字符串化,方法是将宏通过一个类似函数的宏传递给另一个将其字符串化的宏: #define STR1(x) #x #define STR2(x) STR1
至少一些 C 预处理器允许您将宏的值而不是它的名称字符串化,方法是将宏通过一个类似函数的宏传递给另一个将其字符串化的宏: #define STR1(x) #x #define STR2(x) STR1
我想知道这段代码输出背后的原因。我想不出答案。 #define f(a,b) a##b #define g(a) #a #define h(a) g(a) void main() { print
是否有开箱即用的 golang 方法可以让我对 go 结构进行字符串化(序列化为字符串)。 用零值序列化是一种选择,但是一个丑陋的选择。 最佳答案 这是一个示例程序,它使用 encoding/json
我需要将一个 #define 参数字符串化为一个宽字符串。 所以当 #define c(x) x,#x 用作: {c(maria),0,false}, 给出: {maria,"maria",0,fal
我是一名优秀的程序员,十分优秀!