抱歉,我错过了分号,我现在已经添加了。
#include <stdio.h>
#define m(i,j) (i##j)
int main(){
m(hello,world);
return 0;
}
编译时我得到了以下错误 main.c:在函数'main'中: main.c:8:1:错误:'helloworld'未声明(首次使用此函数) main.c:8:1:注意:每个未声明的标识符仅针对它出现在
中的每个函数报告一次但是
#include <stdio.h>
#define m(i,j) (i##j)
int main(){
m(1,2);
return 0;
}
完美运作并给出答案为12
答案 0 :(得分:1)
你必须记住,预处理器完全取代了宏调用。所以在你的情况下宏调用
m(hello,world)
变为
(helloworld)
这不是C中的有效语句或表达式。您询问的错误是因为编译器不知道helloworld
是什么,但是由于缺少分号,还应该有其他错误。
另一个示例,m(1,2)
被(12)
替换至少更有效,因为没有未声明的标识符。但它仍然缺少分号。
答案 1 :(得分:0)
应用宏后,您就可以了:
#include <stdio.h>
int main(){
(helloworld)
return 0;
}
编译器说,helloworld
是什么?
答案 2 :(得分:0)
检查出来
#include <stdio.h>
#define m(i,j) (i##j)
int main(){
m('hello','world')
return 0;
}
答案 3 :(得分:0)
当你使用宏连接hello和world时,你并没有真正创建一个char *或char [], 但是一个符号。
因为代码之前没有定义符号helloworld
,所以当然会得到一个未定义的错误。
要解决这个问题,你可以简单地将符号定义为int或任何其他原语,并将它的声明放在宏之前:
int helloworld;
然后
m(hello,world) = 10;
printf ("%d", helloworld);
答案 4 :(得分:0)
只需将字符串放在一起,就可以连接字符串。
#include <stdio.h>
#define m(i,j) (i j)
int main(){
m("hello","world");
return 0;
}
或只是
int main(){
"hello" "world";
return 0;
}