我正在编写一个简单的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文件中的正确编码风格?
答案 0 :(得分:2)
将字符串放在.c文件中?
您的字符串应放在.c文件中,因为它们在.c文件中使用。换句话说,将它们放在要使用的位置。
我建议你也看一下this回答,这实际上表明你也可以使用关键字extern
。
标记变量,以便它不会收到警告?
如果要完全禁用此警告,请参阅this answer。要按照你的说法标记变量,你可以这样做:
static char* bad_response __attribute__((unused)) = "400, BAD request";
使用哪一个?
我强烈建议使用第一种方法 ,因为第二种方法使代码的可读性降低(有些可能会被额外的代码混淆)。如果您禁用所有变量的警告,那么您将失去有用警告的帮助,这在其他情况下可能会为您节省。
答案 1 :(得分:1)
这里的问题是static
关键字给出了变量内部链接,导致每个翻译单元的变量副本。您很可能希望它为extern
,并在一个翻译单元中定义它。或者,将其移至.c
文件中,如其他答案所示。