首页 新闻 会员 周边 捐助

关于c++宏展开的问题

0
悬赏园豆:10 [待解决问题]

include<iostream>

using namespace std;

define TEST "test"

int main(){
printf("TEST:"TEST);
}

这段代码我是用g++可以成功编译,但是使用vs2019编译失败,好像是TEST宏没有展开,请问在vs下要怎么才能编译成功吗,感谢~

huoming的主页 huoming | 初学一级 | 园豆:116
提问于:2021-11-01 11:25
< >
分享
所有回答(3)
0

代码以供参考:

#include<iostream>
using namespace std;

#define TEST(X) X##"test"
int main()
{
	printf(TEST("TEST:"));
	return 0;
}
寂静的羽夏 | 园豆:2133 (老鸟四级) | 2021-11-01 21:20

有没有修改编译参数的解决方案,因为这个问题是出现在我在Win10环境下编译java虚拟机源码出现的,如果这样解决的话就要修改jvm源码,工作量太大了

支持(0) 反对(0) huoming | 园豆:116 (初学一级) | 2021-11-01 21:26

@huoming: 这好像不行,VS 默认编译器不支持这种宏展开的。唯一的办法就是 VS 使用 g++ 编译。这个我没搞过,祝你好运。

支持(0) 反对(0) 寂静的羽夏 | 园豆:2133 (老鸟四级) | 2021-11-01 22:47

@寂静的羽夏: 好的,感谢

支持(0) 反对(0) huoming | 园豆:116 (初学一级) | 2021-11-03 16:28
0

给看看报什么错, 不要好像啊

jakio6 | 园豆:1325 (小虾三级) | 2021-11-02 21:17

支持(0) 反对(0) huoming | 园豆:116 (初学一级) | 2021-11-03 16:27

@huoming: 我这报这个:

Invalid suffix on literal; C++11 requires a space between literal and identifier

要加个空格.

支持(0) 反对(0) jakio6 | 园豆:1325 (小虾三级) | 2021-11-03 19:09

@jakio6: 我知道加空格可以,但是这个问题是出现在jvm源码里面,源码中有很多这种,我改不过来,有什么其他办法吗

支持(0) 反对(0) huoming | 园豆:116 (初学一级) | 2021-11-03 19:11

@huoming: 用C++11之前的版本

支持(0) 反对(0) jakio6 | 园豆:1325 (小虾三级) | 2021-11-03 19:56

@jakio6: c++我不太熟悉,请问一下vs2019怎么切换成c++11之前版本的编译器

支持(0) 反对(0) huoming | 园豆:116 (初学一级) | 2021-11-04 11:23
0

切换编译器,VS安装llvm,然后编译器换成clang-cl

丸子球球 | 园豆:202 (菜鸟二级) | 2022-04-20 14:21
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册