首页 > 解决方案 > 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

标签: c++windowsvisual-studio

解决方案


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

推荐阅读