C89 GCC 4.7.4格式化與可變參數變量
你好,
我只是用宏這樣的實驗:
#define LOG_INFO_1(fmt, ...) printf(fmt, __VA_ARGS__)
#define LOG_INFO_2(...) printf(__VA_ARGS__)
而且使用這樣的:
LOG_INFO_1("%s:%d", __func__, __LINE__);
LOG_INFO_2("%s:%d", __func__, __LINE__);
輸出提供完全相同的格式。我只是想知道在我的第一個宏中使用fmt
參數有什麼好處?它似乎並不是真的需要。我怎麼能利用它?
非常感謝您的任何建議,
如果您只想傳遞格式字符串,例如, 'LOG_INFO_1(「只是一個簡單的字符串」)'。當你這樣做時,'LOG_INFO_1'會導致編譯器錯誤,因爲調用'printf'後面的逗號(因爲'__VA_ARGS__'在這種情況下擴展爲空字符串),而'LOG_INFO_2'將正確擴展。 –