Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
#和C语言中的##宏_C_Macros - Fatal编程技术网

#和C语言中的##宏

#和C语言中的##宏,c,macros,C,Macros,方案1: #include <stdio.h> #define foo(x, y) #x #y int main() { printf("%s\n", foo(k, l)); //prints kl return 0; } #包括 #定义foo(x,y)#x#y int main() { printf(“%s\n”,foo(k,l));//打印kl 返回0; } 方案2: #include <stdio.h> #define foo(m, n) m ## n

方案1:

#include <stdio.h>
#define foo(x, y) #x #y

int main()
{
  printf("%s\n", foo(k, l)); //prints kl
  return 0;
}
#包括
#定义foo(x,y)#x#y
int main()
{
printf(“%s\n”,foo(k,l));//打印kl
返回0;
}
方案2:

#include <stdio.h>
#define foo(m, n) m ## n

int main()
{
  printf("%s\n", foo(k, l)); //compiler error
}
#包括
#定义foo(m,n)m##n
int main()
{
printf(“%s\n”,foo(k,l));//编译器错误
}
为什么这两个项目的产出都有如此大的差异? 这两个程序之间的确切区别是什么?

是“字符串化”操作符;它将其参数转换为字符串文字

##
是“令牌粘贴”操作符;它将两个参数连接到一个标记中,而不一定是字符串文字

例如:

#include <stdio.h>

#define foo(m, n) m ## n

int main(void) {
    char *kl = "token pasting";
    printf("%s\n", foo(k, l));
}
#
是“字符串化”操作符;它将其参数转换为字符串文字

##
是“令牌粘贴”操作符;它将两个参数连接到一个标记中,而不一定是字符串文字

例如:

#include <stdio.h>

#define foo(m, n) m ## n

int main(void) {
    char *kl = "token pasting";
    printf("%s\n", foo(k, l));
}
#
串接,
#
串接。这是一个重复。
字符串化,
串联。这是一个重复。如果到达运行时,可能不是“编译器错误”:)如果到达运行时,可能不是“编译器错误”: