VS上照着小甲鱼敲的可变参数代码执行不了,DEV上也是
#include<stdio.h>#define PRINT (format,...) printf(#format,##__VA_ARGS__)
int main(void)
{
PRINT(num = % d\n, 520);
PRINT(Hello world\n);
return 0;
} 第6行的 %d 打成了 % d,中间多了一个空格
#include<stdio.h>
#define PRINT (format,...) printf(#format,##__VA_ARGS__)
int main(void)
{
PRINT(num = %d\n, 520);
PRINT(Hello world\n);
return 0;
} DEV上的报错是这样的
stray '#' in program
in expansion of macro 'PRINT'
pasting "," and "__VA_ARGS__" does not give a valid preprocessing token
in expansion of macro 'PRINT'
stray '\' in program
stray '#' in program
in expansion of macro 'PRINT'
pasting "," and "__VA_ARGS__" does not give a valid preprocessing token
in expansion of macro 'PRINT'
stray '\' in program
'format' was not declared in this scope
in expansion of macro 'PRINT'
expected primary-expression before '...' token
in expansion of macro 'PRINT'
expected ')' before '...' token
in expansion of macro 'PRINT'
expected primary-expression before '...' token
in expansion of macro 'PRINT'
expected ')' before '...' token
in expansion of macro 'PRINT'
isdkz 发表于 2023-3-22 11:26
第6行的 %d 打成了 % d,中间多了一个空格
谢谢回复 这个应该是网页显示问题,我复制了你的代码执行也是一样的报错 #include<stdio.h>
#define PRINT (format,...) printf(#format,##__VA_ARGS__)
int main(void)
{
PRINT(num = %d\n, 520);
PRINT(Hello world\n);
return 0;
}代码这样 报错是这样
2 45 D:\yxlc\未解决\可变参数宏.cpp __VA_ARGS__ can only appear in the expansion of a C99 variadic macro
2 35 D:\yxlc\未解决\可变参数宏.cpp stray '#' in program
6 5 D:\yxlc\未解决\可变参数宏.cpp in expansion of macro 'PRINT'
2 42 D:\yxlc\未解决\可变参数宏.cpp pasting "," and "__VA_ARGS__" does not give a valid preprocessing token
6 5 D:\yxlc\未解决\可变参数宏.cpp in expansion of macro 'PRINT'
6 5 D:\yxlc\未解决\可变参数宏.cpp stray '\' in program
2 35 D:\yxlc\未解决\可变参数宏.cpp stray '#' in program
7 5 D:\yxlc\未解决\可变参数宏.cpp in expansion of macro 'PRINT'
2 42 D:\yxlc\未解决\可变参数宏.cpp pasting "," and "__VA_ARGS__" does not give a valid preprocessing token
7 5 D:\yxlc\未解决\可变参数宏.cpp in expansion of macro 'PRINT'
7 5 D:\yxlc\未解决\可变参数宏.cpp stray '\' in program
D:\yxlc\未解决\可变参数宏.cpp In function 'int main()':
2 16 D:\yxlc\未解决\可变参数宏.cpp 'format' was not declared in this scope
6 5 D:\yxlc\未解决\可变参数宏.cpp in expansion of macro 'PRINT'
2 23 D:\yxlc\未解决\可变参数宏.cpp expected primary-expression before '...' token
6 5 D:\yxlc\未解决\可变参数宏.cpp in expansion of macro 'PRINT'
2 23 D:\yxlc\未解决\可变参数宏.cpp expected ')' before '...' token
6 5 D:\yxlc\未解决\可变参数宏.cpp in expansion of macro 'PRINT'
2 23 D:\yxlc\未解决\可变参数宏.cpp expected primary-expression before '...' token
7 5 D:\yxlc\未解决\可变参数宏.cpp in expansion of macro 'PRINT'
2 23 D:\yxlc\未解决\可变参数宏.cpp expected ')' before '...' token
7 5 D:\yxlc\未解决\可变参数宏.cpp in expansion of macro 'PRINT'
isdkz 发表于 2023-3-22 11:36
还存在一些问题,我又修改了一下:
1、修改宏定义中的#format为format。因为我们希望传入的字符串直接 ...
你好,这样编译就过了,能执行了,谢谢,我先设这个答案为最佳,但我还是再想想为啥和小甲鱼的那里不一样,会不会是编译器的问题,我有机会弄一个虚拟机上的环境试试,总而言之 谢谢你 又要入门到放弃 发表于 2023-3-22 11:32
代码这样 报错是这样
2 45 D:\yxlc\未解决\可变参数宏.cpp __VA_ARGS__ can only appear in the ...
#define PRINT后面也多了一个空格
#include<stdio.h>
#define PRINT(format,...) printf(#format,##__VA_ARGS__)
int main(void)
{
PRINT(num = %d\n, 520);
PRINT(Hello world\n);
return 0;
} 又要入门到放弃 发表于 2023-3-22 11:43
你好,这样编译就过了,能执行了,谢谢,我先设这个答案为最佳,但我还是再想想为啥和小甲鱼的那里不一样 ...
我重新回复你了,你的问题主要就是 % d 和 PRINT (format, ...) 这两个地方多了空格
页:
[1]