讓我解釋一下這種情況: 我有一個C結構如下:如何使用具有自適應類型的printf()函數?
typedef struct {
int *val;
char *name;
} tStruct;
這種結構可能會被填充如下: - VAL可以爲空,如果「VAL」值不可用,否則VAL是一個整數值(可以是負數) - 名稱不可用時,名稱可以是空字符串,如果名稱可用,名稱可以是填充字符串(此處不爲空指針)。
我希望寫一個日誌行如下:
- 如果val是無效的,名稱是有效的(等於WOOT):
LOG VAL =#NAME = WOOT
- 如果val無效,名稱無效:
LOG VAL =#NAME =#
- 如果val是有效的,名稱是無效的:
LOG VAL = 123456名=#
- 如果val有效,名稱有效(等於WOOT):
LOG VAL = 123456名= WOOT
這意味着我需要爲使用的printf( 「VAL =%s的名稱=%s」 時,...)或printf(「val =%d name =%s」,...),這取決於id值(這樣我可以輸出一個#或整數)。當val無效時輸出一個假整數值是不合適的,因爲任何有符號或無符號的值都是可能的。
有什麼想法?我希望我能避免以下類型的結構,因爲我的結構實際上將包含許多領域,使得太多的「如果」組合:
if ((struct.val == NULL) && (struct.name)) then printf ("val=# name=%");
else if ((struct.val == NULL) && (! struct.name)) then printf ("val=# name=#");
else if ...
謝謝
我不認爲你的意思是'%#',那應該只是一個普通的'#',即沒有格式說明符。 – unwind 2013-02-14 09:58:42
是的,你對此感到抱歉。更正了,謝謝指出! – SCO 2013-02-15 14:27:14