2011-12-09 53 views
0

我有一套用於跟蹤代碼的語句。擺脫編譯一些陳述集

有沒有什麼辦法在編譯之前擺脫這些語句來提高性能?

在這種情況下預編譯頭文件的概念是否會生效?

在此先感謝
Rupesh

回答

2

通常軌跡與此類似(此處過於簡單化)的方式進行:

#ifdef DISPLAY_TRACES 
#define TRACE(x) printf(x) 
#else 
#define TRACE(x) 
#endif 

然後用或取決於你是否想痕跡不-DDISPLAY_TRACES編譯。

+0

謝謝你一堆。有沒有辦法將這個概念應用於.Net世界 – Rupesh

1

使用預處理指令刪除跟蹤語句:

#ifdef TRACING_IS_ENABLED 
    /* Perform tracing operations. */ 
#endif 

確保沒有出現意料之外的副作用從跟蹤語句。

如果要重新啓用跟蹤操作,請定義宏TRACING_IS_ENABLED

2

你可以把在預處理器宏跟蹤,並使用預處理器條件來選擇應使用的宏:

#ifdef TRACING_ENABLED 
# define TRACE(x) printf("TRACE: %s:%d %s\n", __FILE__, __LINE__, x) 
#else 
# define TRACE(x) 
#endif 

void foo() 
{ 
    TRACE("In foo()"); 
} 

如果TRACING_ENABLED被定義,所述TRACE宏由printf取代聲明。如果TRACING_EMABLED而不是定義,則TRACE被替換爲空行。

+2

我會拿出';'在#define中,並將其放在調用之後。如果你有'if(cond)TRACE(「cond」)else TRACE(「not cond」)它會預編譯爲if(cond)else是不好的。另一個會導致if(cond);其他;這在語法上沒問題。 –

+0

有沒有一種方法可以將此代碼保存在一個文件中,並將此文件包含在另一個文件中並使用它。就像在模塊中重複使用此代碼 – Rupesh

+0

@PeterMiehle你是對的。更新了我的答案。 –