在试图摆脱我的GCC警告代码时,我发现了一个奇怪的错误/行为。我的程序使用自定义退出函数执行一些清理,最后调用exit()
。
然而,我使用此退出函数导致GCC产生虚假警告:
控件使用自定义退出函数
到达非void函数的结尾
导致此错误的程序示例如下:
FILE1.C:
extern void CleanExit(int ExitCode);
int MyFunc(int ErrorCode)
{
if(-1 == ErrorCode)
return -1;
if(1 == ErrorCode)
return 1;
if(2 == ErrorCode)
return 0;
if(3 == ErrorCode)
CleanExit(0);
CleanExit(-1);
}
file2.c中:
void CleanExit(int ExitCode)
{
/* Do Some Cleanup */
exit(ExitCode);
}
有没有办法摆脱这些警告而不会对使用这种结构的每个功能添加无用的瑕疵?
我更愿意使用标准C,但如果需要,我愿意使用某种GCC编译指示。
答案 0 :(得分:4)
您使用GCC标记了您的问题。因此,您可以尝试使用GCC指定属性,而不是将函数从void
更改为int
并在任何地方添加return
。在__attribute__((noreturn))
声明之上添加CleanExit()
。这将提醒编译器CleanExit()
永远不会直接返回给调用者。
答案 1 :(得分:3)
这应该这样做
extern int CleanExit(int ExitCode);
int MyFunc(int ErrorCode)
{
if(-1 == ErrorCode)
return -1;
if(1 == ErrorCode)
return 1;
if(2 == ErrorCode)
return 0;
if(3 == ErrorCode)
return CleanExit(0);
return CleanExit(-1);
}
int CleanExit(int ExitCode)
{
/* Do Some Cleanup */
exit(ExitCode);
}
答案 2 :(得分:0)