'已定义但未使用'警告和正确的代码样式

时间:2014-11-05 00:26:25

标签: c

我正在编写一个简单的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文件中的正确编码风格?

2 个答案:

答案 0 :(得分:2)

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

您的字符串应放在.c文件中,因为它们在.c文件中使用。换句话说,将它们放在要使用的位置。

我建议你也看一下this回答,这实际上表明你也可以使用关键字extern


标记变量,以便它不会收到警告?

如果要完全禁用此警告,请参阅this answer。要按照你的说法标记变量,你可以这样做:

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

使用哪一个?

我强烈建议使用第一种方法 ,因为第二种方法使代码的可读性降低(有些可能会被额外的代码混淆)。如果您禁用所有变量的警告,那么您将失去有用警告的帮助,这在其他情况下可能会为您节省。

答案 1 :(得分:1)

这里的问题是static关键字给出了变量内部链接,导致每个翻译单元的变量副本。您很可能希望它为extern,并在一个翻译单元中定义它。或者,将其移至.c文件中,如其他答案所示。