c++ - 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__)
解决方案
__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.
推荐阅读
- go - yaml:解组错误:无法将字符串解组为时间。Golang中的持续时间
- angular - 为什么 PrimeNG 的 FileUpload 在 onBeforeUpload 事件后不调用服务器?
- python - 当我在 selenium python 中获取 MP4 文件的 URL 时如何下载视频?(没有 URLLIB)
- xamarin - 如何使用 Xamarin Essentials 获取蓝牙连接状态
- php - php.ini mysqli.allow_persistent 即使在 php 重启后也不会关闭
- ngrx - NgRx-reducer 抛出异常后 store.dispatch 停止工作
- ruby-on-rails - 在同一页面上使用相同的表单进行新操作和编辑操作(simple_form 和 Rails)
- android - 更新到 v0.5.1 后 Flutter 导入不存在
- kubernetes - Kubernetes 集群中没有传出网络连接
- macos-high-sierra - macOS Hight Sierra / Mojave:以编程方式获取“系统偏好设置->辅助功能->显示->增加对比度”的值