Re: [問題] printf type of value

看板C_and_CPP作者 ([+++++++======>])時間10年前 (2014/07/30 20:23), 編輯推噓0(003)
留言3則, 3人參與, 最新討論串4/4 (看更多)
模仿上一篇文,用 macro 來做,但是改用 C11 的 _Generic, 這樣也能解決 long long 的問題。 #include <stdio.h> #define FORMAT(x) \ _Generic((x), \ int: "type = int, data = %d\n", \ char: "type = char, data = %c\n", \ long: "type = long, data = %ld\n", \ float: "type = float, data = %f\n", \ long long: "type = long long, data = %lld\n" ) int main () { int a = 0; char b = 'a'; long c = 100; float d = 5.4; long long e = 12345678901234LL; printf (FORMAT (a), a); printf (FORMAT (b), b); printf (FORMAT (c), c); printf (FORMAT (d), d); printf (FORMAT (e), e); return 0; } 不過也因為是 C11 新支援的語法,所以要用比較新的編譯器才行, 測試過 GCC 4.9 和 Clang 3.1 或更新的版本都有支援。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 175.181.43.117 ※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1406723021.A.518.html

07/30 20:51, , 1F
C11...完全沒有在跟 普遍度好像比 C++11 低很多
07/30 20:51, 1F

07/30 22:09, , 2F
long long的問題 用typedef繞圈子不就解決了?
07/30 22:09, 2F

07/31 23:55, , 3F
只是想說用 _Generic 可能看起來比較直接一點
07/31 23:55, 3F
文章代碼(AID): #1JsEFDKO (C_and_CPP)
文章代碼(AID): #1JsEFDKO (C_and_CPP)