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