【发布时间】:2019-10-15 13:43:07
【问题描述】:
我觉得这个问题很有趣:How to force compilation error if function return value is not checked?
如果您不检查返回值,则会强制执行编译错误。我为这个问题写了一个答案,你可以像这样使用 gcc 扩展:
__attribute__ ((warn_unused_result)) int foo (void)
{
return 5;
}
强制发出警告并使用-Werror=unused-result 进行编译,以使编译器在您不以某种方式使用返回值时生成错误。
现在我想为常规标准函数创建包装函数。一个想法是像这样重命名它们:
__attribute__ ((warn_unused_result)) realloc_wrapper(void *ptr, size_t new_size)
{
return realloc(ptr, new_size);
}
但问题是这迫使我使用不同的名称,这会导致大量搜索和替换。当然,这可以自动完成,但仍然可以。最好,我希望能够创建一个我可以使用的头文件,而不是任何程序的标准 C 头文件。一个用例是调试一个大程序时。然后这会立即指出错误的潜在原因。
TL;DR
所以简而言之,我希望能够参加这个项目:
#include <stdlib.h>
int main(void)
{
char *ptr;
realloc(ptr, 42);
}
并将其更改为:
// Replaced stdlib with a custom header
#include <mystdlib.h>
int main(void)
{
char *ptr;
realloc(ptr, 42);
}
然后带有realloc 的行应该会生成一个警告。
我可以补充一点,我可以接受不是 100% 完美的解决方案。预期用途是用于调试而不是生产代码。
编辑:
我刚刚注意到realloc 是一个糟糕的选择,因为它似乎已经默认具有此声明,但我使用了 PSkocik 并使其适用于fgets。
【问题讨论】:
标签: c gcc return-value