gcc版本:5.5.0
vs版本:vs 2015
如下巨集定義**
#define logdebug(format, ...) fprintf(stdout, "debug file:%s, line:%d, msg: " format"\n", __file__, __line__, ##__va_args__)
//#define logdebug(format, args...) fprintf(stdout, "debug file:%s, line:%d, msg: " format"\n", __file__, __line__, ##args)
#define loginfo(format, args...) fprintf(stdout, "info file:%s, line:%d, msg: " format"\n", __file__, __line__, ##args)
#define logwarn(format, args...) fprintf(stderr, "warn file:%s, line:%d, msg: " format"\n", __file__, __line__, ##args)
#define logerror(format, args...) fprintf(stderr, "error file:%s, line:%d, msg: " format"\n", __file__, __line__, ##args)
#define logfatal(format, args...) fprintf(stderr, "fatal file:%s, line:%d, msg: " format"\n", __file__, __line__, ##args)
vs和gcc都可以編譯通過的。
而如下**gcc是無法編譯通過的,vs是能正常編譯通過的。(與上份**的區別,只是format前面少了乙個空隔)
#define logdebug(format, ...) fprintf(stdout, "debug file:%s, line:%d, msg: "format"\n", __file__, __line__, ##__va_args__)
//#define logdebug(format, args...) fprintf(stdout, "debug file:%s, line:%d, msg: " format"\n", __file__, __line__, ##args)
#define loginfo(format, args...) fprintf(stdout, "info file:%s, line:%d, msg: "format"\n", __file__, __line__, ##args)
#define logwarn(format, args...) fprintf(stderr, "warn file:%s, line:%d, msg: "format"\n", __file__, __line__, ##args)
#define logerror(format, args...) fprintf(stderr, "error file:%s, line:%d, msg: "format"\n", __file__, __line__, ##args)
#define logfatal(format, args...) fprintf(stderr, "fatal file:%s, line:%d, msg: "format"\n", __file__, __line__, ##args)
按照正常的巨集定義的理解,format前面有無空隔均可以編譯通過的。見如下**:
logdebug("helllo world.%d", 1);
//compile okay
fprintf(stdout, "debug file:%s, line:%d, msg: ""helllo world.%d""\n", __file__, __line__, 1);
//compile okay
fprintf(stdout, "debug file:%s, line:%d, msg: " "helllo world.%d""\n", __file__, __line__, 1);
另外,gcc 6.5.0版本是能夠正常編譯通過。所以我認為這是gcc 5.5.0的bug,coder們遇到此問題無需糾結,解決方法就是在變數名前加乙個空隔,原因可能把空隔當成了分隔符來處理了。 關於gcc擴充套件中的巨集定義中用 和
關於gcc擴充套件中的巨集定義中用 和 今天測試了巨集定義中的 和 的區別。結果如下 代表和乙個字串相連線 代表和乙個符號連線,符號可以是變數,或另乙個巨集符號。舉例如下 巨集定義如下 1 define dev file name dev test kft define open file fd,n...
關於gcc擴充套件中的巨集定義中用 和
關於gcc擴充套件中的巨集定義中用 和 今天測試了巨集定義中的 和 的區別。結果如下 代表和乙個字串相連線 代表和乙個符號連線,符號可以是變數,或另乙個巨集符號。舉例如下 巨集定義如下 1 define dev file name dev test kft define open file fd,n...
關於巨集的 與
c c 巨集中 和 的用法 zz 巨集中 和 的用法 一 一般用法 我們使用 把巨集引數變為乙個字串,用 把兩個巨集引數貼合在一起.用法 include includeusing namespace std define str s s define cons a,b int a e b int m...