c++ - Windows Visual C++ 2019 试图传递预处理器变量(Linux 中的 -D)错误 C2143:语法错误:缺少 ';' 在“常数”之前
问题描述
我正在做从 Linux 到 Windows 的简单移植,现在在 Linux 中,我通过简单的 -DVERSION=1 来获取预处理器宏中的值:例如:
#define APP_NAME "MyApp " VERSION
在 Windows 中,当我在以下位置设置 VERSION 值时:配置属性、C/C++、预处理器 -> 预处理器定义为:
VERSION=1
我越来越 :
error C2143: syntax error: missing ')' before 'constant'
如果 VERSION 在其他地方定义,例如:
char *message = (char*)"MyApp " VERSION "\0";
得到相同的:
error C2143: syntax error: missing ';' before 'constant'
当我将鼠标指向 VERSION 定义时,我确实看到它设置为 1
解决方案
和
VERSION=1
然后VERSION
扩展为整数文字1
,这意味着您的语句如下:
char *message = "MyApp " 1 "\0";
这是无效的,因为您不能将字符串文字与整数文字连接起来。为此,您需要定义VERSION
为字符串文字:
VERSION="1"
至于APP_NAME
宏,你有一个类似的问题。一种解决方案与上述相同,定义VERSION
为字符串。但另一个是使用 poreprocessor 连接运算符##
:
#define APP_NAME "MyApp " ## VERSION
或者使用预处理器“stringify”操作符#
:
#define APP_NAME "MyApp " #VERSION
推荐阅读
- azure - Azure 数据工厂 V2 - 并行触发的同一管道的多个实例
- autohotkey - 错误“~”不是有效的键名 (AutoHotkey 1.1.30.00)
- java - 为什么这是一个无效的 smali 寄存器?
- r - R比较文档之间的单词
- android - 如何从 ListView 和 SQLite 数据库中删除项目?
- php - 来自php的gradle命令执行失败
- php - 将 Content-type 标头设置为 Elasticsearch-php 客户端
- python - 在每个特定间隔后训练 ML 模型时的内存使用问题
- java - 维度 2 的自定义对象数组的初始化
- javascript - 如何在单击不同按钮时显示具有不同内容的相同模式?