2014-11-05 163 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文件中。

相关问题