首页 > 解决方案 > g ++宏连接与c ++宏连接

问题描述

我正在将基于 Windows 的 C++ 项目移植到 Windows 中,但遇到了以下错误。

UeiDaqAnsiC.cpp:105:24
error: expected ')' before string constant
UEI_ERROR(__FUNCTION__ " error: %s\n", e.getErrorMessage());

看起来 linux 似乎无法将__FUNCTION__宏与以下字符串连接起来。这很令人困惑,因为该项目在 Windows 中编译和构建都很好。

作为一个快速修复,它似乎只是在,之间添加一个__FUNCTION__"error: %s\n", e.getErrorMessage()完全修复它。

新的固定线路是这样的UEI_ERROR(__FUNCTION__, " error: %s\n", e.getErrorMessage());

我来到这里是因为我不精通 linux g++ 编译器,我想知道这是否是解决此错误的有效解决方法,然后再修复发生此错误的所有 130 行。

编辑:我还想问一下逗号是否保留了简单连接宏和字符串的功能

EDIT2:UEI_ERROR定义为 #define UEI_ERROR(...) UeiPalTraceOutputWithLevel(UeiPalTraceError, __VA_ARGS__)

标签: c++linuxstringmacrosg++

解决方案


__FUNCTION__不是字符串文字,不能由预处理器与其他字符串文字连接。

,您通过添加更改含义的“修复” ,主要是

printf(__FUNCTION__ " format %i", 42);        // MyFunction format 42
printf("MyFunction", "unused format %i", 42); // MyFunction

真正的解决方法是更改​​格式和重新排序参数:

UEI_ERROR("%s error: %s\n", __FUNCTION__, e.getErrorMessage());// MyFunction error: error message.

推荐阅读