2014-11-05 73 views
0

我在寫一個簡單的Web服務器來處理一個類的HTTP 1.1請求。因此,我定義了一些我在程序中使用很多的'股票'字符串,例如。'已定義但未使用'警告和正確的代碼樣式

static char* bad_response = // 400, BAD request 
    "HTTP/1.1 400 Bad Request\n"; 

static char* bad_req_body = // 400 error 
    "<html><body>\n<h2>Malformed Request</h2>\n" 
    "Your browser sent a request I could not understand.\n</body></html>\n"; 

這些字符串在.h文件中定義的,但只在.c文件中使用,造成了警告「‘bad_response’定義,但不使用」。

所以我的問題,是否有一些標誌這些變量,所以他們不提出特別警告?或者只是將這些變量移動到.c文件中是否正確的編碼風格?

+4

後者,他們不屬於標題。其實,只需將它們插入其使用地點即可。 – Deduplicator 2014-11-05 00:29:24

回答

2

將字符串放在.c文件中?

您的字符串應放置在.c文件中,因爲它們在.c文件中使用。換句話說,把它們放在他們打算使用的地方。

我建議你看看this的答案,其實也表明你也可以使用關鍵字extern


標記一個變量,使其不會收到警告?

如果要完全禁用此警告,請參閱this答案。爲了國旗就像你說的變量,你可以這樣做:

static char* bad_response __attribute__((unused)) = "400, BAD request"; 

使用哪一個?

我強烈建議使用第一種方法,由於第二使代碼的可讀性(有些可以通過額外的代碼混淆)。如果您禁用所有變量的警告,那麼您將失去有用警告的幫助,在其他情況下可能會爲您節省。

1

這裏的問題是static關鍵字給出了可變的內部鏈接,導致每個翻譯單元的變量的副本。您最有可能希望它是extern,並將其定義爲一個翻譯單元。或者,如其他答案所示,將其移動到您的.c文件中。

相關問題