linux C++中宏定义的问题:error: unable to find string literal operator ‘operator""fmt’ with ‘const char [4]’, ‘long unsigned int’ arguments


测试项目的代码里有这样的宏定义

#define SCRPRINT(fmt,...)     fprintf(stderr, "[%s]-> "fmt"\n", __FUNCTION__, ##__VA_ARGS__)

 

在linux的c或者windows下的c/c++都没问题,在linux的cpp中编译无法通过,报了下面的错误

error: unable to find string literal operator ‘operator""fmt’ with ‘const char [4]’, ‘long unsigned int’ arguments

查了很久,才发现需要在fmt前面增加一个空格,这是C++11才新增的语法要求,而我们的操作系统和编译器刚好也升级了,导致以前的代码不兼容新的编译器了

修改之后的代码如下:

#define SCRPRINT(fmt,...)     fprintf(stderr, "[%s]-> " fmt"\n", __FUNCTION__, ##__VA_ARGS__)

 

增加空格之后,无论你的程序保存成.c或者.cpp文件,编译都是成功的,而且用旧版本的gcc/g++也没问题。

有的文章里说fmt后面也要增加空格,实际测试下来似乎可有可无。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM