宏形式参数列表中出现意外错误

Posted

技术标签:

【中文标题】宏形式参数列表中出现意外错误【英文标题】:Unexpected in macro formal parameter list Error 【发布时间】:2011-03-02 02:07:38 【问题描述】:

我是一名实习生,我的老板让我从 Linux c 移植到 Visual C++。

在编译编码的时候,发现这个错误“unexpected in macro form parameter list”,这里是代码

#define cache_info(format, msg...)  
    do  \
        ;\
     while (0)  

我不知道出了什么问题,也不知道编码是干什么用的。

我也不能问那个 Linux 程序员,因为他不在了。谁能帮帮我???

【问题讨论】:

【参考方案1】:

听起来您的 Visual C++ 版本不支持可变参数宏。

您可能需要尝试类似的方法才能使其正常工作。

#define FUNC(foo)  ThisFunc foo

void ThisFunc(int, ...);

int main()

    FUNC((123, 456));

或者你可能只是缺少一个逗号?....

#define cache_info(format, msg,...)  

【讨论】:

【参考方案2】:

我认为问题可能来自两件事之一。

首先,您的宏定义为

cache_info(format, msg...)

但你可能是想写

cache_info(format, msg, ...)

虽然这可能只是您原始帖子中的一个错字。

更重要的是,C++ 不支持具有可变数量参数的宏(“可变宏”);它们只存在于 C 中。如果您尝试使用 C++ 编译器编译此 C 代码,编译器应该在此处给您一个错误,因为该代码不是合法的 C++。

【讨论】:

【参考方案3】:

如果使用 Windows 64 位操作系统和 Visual Studio,请在运行此 bat 文件后尝试:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\Tools\vsvars32.bat

它将注册环境设置。它对我有用..

【讨论】:

以上是关于宏形式参数列表中出现意外错误的主要内容,如果未能解决你的问题,请参考以下文章

c基础回顾

为啥此 Django API 调用出现意外的关键字参数错误?

宏编译器错误:当参数名称出现在别处时出现“解析问题”

宏 MOCK_METHOD 传递了 3 个参数,但 std::pair 仅出现 2 个错误

Visual Studio 2015 中的宏参数限制

可变参数列表