我们可以使用命令的输出(带有标志)作为宏预处理器(例如uname --kernel-name
)
#include <stdio.h>
#define version(v) #v
#define VERSION(v) version(v)
int main(void)
{
printf("Version: %s\n", VERSION(kernel_name));
return 0;
}
编译使用:
gcc -Wall -pedantic -o demo demo.c -Dkernel_name=$(uname --kernel-name)
输出:
Version: Linux
但是当宏以#
(例如。uname --kernel-version
)开头时,这会失败:
david@debian:~$ uname --kernel-version
#1 SMP Debian 3.2.46-1+deb7u1
因为你不能定义一个以#
#define SOMETHING #something /* error: stray ‘#’ in program */
有没有办法引用命令的输出?
"#1 SMP Debian 3.2.46-1+deb7u1"
为了获得有效的输入?