我有以下宏:C預處理與if語句
#define IF_TRACE_ENABLED(level) if (IsTraceEnabled(level))
用戶代碼應該如下:
IF_TRACE_ENABLED(LEVEL1)
{
... some very smart code
}
這裏花括號強調 - 我要防止「如果」從宏 「吃」 其他代碼:
if (...)
IF_TRACE_ENABLED(LEVEL1)
printf(....);
else
bla bla bla
在這個例子中IF_TRACE_ENABLED
「吃」 else塊。
有沒有辦法強制用戶代碼不編譯沒有卷閘或有其他來定義宏來實現安全?
我沒有看到這個宏給你的裸if語句。 – JeremyP 2010-09-28 10:29:03
忘掉這個例子。你可能會遇到一個複雜的情況,那就是你不想每次都重複一遍。 – 2010-09-28 11:08:37
@JeremyP:在這個簡單的例子中,沒有太多實用的宏,但是正如Nathan指出的那樣,在調試宏中可能會有更多的複雜性和/或基於構建配置的宏有多種變化例如,總是評估爲「false」的版本版本,以便跟蹤字符串從可執行文件中除去)。 – 2010-09-28 14:37:09