又要入门到放弃 发表于 2023-3-22 11:22:08

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;
}

isdkz 发表于 2023-3-22 11:26:03

第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;
}

又要入门到放弃 发表于 2023-3-22 11:26:12

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'

又要入门到放弃 发表于 2023-3-22 11:28:52

isdkz 发表于 2023-3-22 11:26
第6行的 %d 打成了 % d,中间多了一个空格

谢谢回复 这个应该是网页显示问题,我复制了你的代码执行也是一样的报错

又要入门到放弃 发表于 2023-3-22 11:32:29

#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'

又要入门到放弃 发表于 2023-3-22 11:43:04

isdkz 发表于 2023-3-22 11:36
还存在一些问题,我又修改了一下:

1、修改宏定义中的#format为format。因为我们希望传入的字符串直接 ...

你好,这样编译就过了,能执行了,谢谢,我先设这个答案为最佳,但我还是再想想为啥和小甲鱼的那里不一样,会不会是编译器的问题,我有机会弄一个虚拟机上的环境试试,总而言之 谢谢你

isdkz 发表于 2023-3-22 11:43:07

又要入门到放弃 发表于 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;
}

isdkz 发表于 2023-3-22 11:44:18

又要入门到放弃 发表于 2023-3-22 11:43
你好,这样编译就过了,能执行了,谢谢,我先设这个答案为最佳,但我还是再想想为啥和小甲鱼的那里不一样 ...

我重新回复你了,你的问题主要就是 % d 和 PRINT (format, ...) 这两个地方多了空格
页: [1]
查看完整版本: VS上照着小甲鱼敲的可变参数代码执行不了,DEV上也是