精華區beta C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) GCC 請問在c底下我要怎麼print出我變數的type 例如說 int a; float b; char c; 我希望能print出 typeof(a)=int; typeof(b)=float; typeof(c)=char; 可是typeof很像不能這樣用? 跪求解 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.120.19.2 ※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1406531436.A.4E9.html
CaptainH:標準的C做不到 07/28 15:13
CaptainH:事實上也不需要這種功能, 因為你自己就應該知道所有型態 07/28 15:14
Killercat:這是java以及script language要邁進C++的第1到難關:D 07/28 15:38
Killercat:C做不到 C++11以降有typeid可以回傳type_info 07/28 15:39
Killercat:http://tinyurl.com/pfny39u 07/28 15:40
Killercat:但是如果你寫code還需要runtime知道他型態的話 以C++ 07/28 15:40
Killercat:來講 我會認為你八成寫爛了或者寫錯了 07/28 15:40
Killercat:這東西叫作RTTI, 基本上你不能依賴他,因為這個在絕大 07/28 15:42
Killercat:多數的compiler都可以被關掉的 比方說 g++ -fno-rtti 07/28 15:43
那這樣子我懂了 感謝大大們 我再去思考一下為什麼我的code需要用到他 而且能怎麼改他 謝謝! ※ 編輯: qas612820704 (140.120.19.2), 07/28/2014 15:46:46 > -------------------------------------------------------------------------- < 作者: lantw44 ([+++++++======>]) 看板: C_and_CPP 標題: Re: [問題] printf type of value 時間: Wed Jul 30 20:23:37 2014 模仿上一篇文,用 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 或更新的版本都有支援。