0
我有這樣的代碼:的#define宏不打印變量
#define PRINT(fmt, ...) printf("%s:%d: "fmt, __FILE__, __LINE__, ## __VA_ARGS__)
它運作良好,當我通過一定的參考價值的,例如PRINT("Hello, world").
但是當我通過變量作爲自變量,例如。 PRINT(somevar)
它不打印變量int somevar
的值。我應該如何重寫宏以使其打印變量呢?
你的意思是我最好重寫它作爲一個傳統的例程,並使用va_list? – cwenz1980 2015-02-08 05:17:38
宏將不工作,除非宏的'fmt'(第一個)參數可以與'「%s:%d:」'字符串連接,這意味着它也必須是文字。要打印'int somevar',宏調用必須是'PRINT(「%d \ n」,somevar);'。 – 2015-02-08 05:20:44
簡而言之,你不能像'printf(some_int_var)'那樣調用'printf';一個格式字符串是需要的。這是沒有什麼不同的(事實上它是強制性的,因爲你的邏輯現在要求它可以連接,並且計算格式字符串不可行,公正的警告)。發送到這裏的唯一直接就像'printf','char *'(const或其他)本身一樣,就像'printf'一樣,出於安全的原因將不鼓勵。 – WhozCraig 2015-02-08 05:28:03