警告:忽略'system'的返回值c

时间:2012-02-05 15:22:32

标签: c

在我的程序中,我将此代码用于指示程序生成命令。这可以用来在我的程序中使用键启动另一个程序,例如生成firefox。使用程序命令run_command“firefox”将具有程序调用系统(“firefox&”)。

    case RUN_COMMAND:
        if( arg ) {
            char commandline[ 256 ];
            snprintf( commandline, sizeof (commandline), "%s &", arg );
            if( cmd->screen ) {
                char message[ 256 ];
                snprintf( message, sizeof (message), _("Running: %s"), arg );
                screen_show_message( cmd->screen, message );
            }
            system( commandline );
        }
        break;

编译时会出现此错误:

warning: ignoring return value of 'system', declared with attribute warn_unused_result [-Wunused-result]

4 个答案:

答案 0 :(得分:11)

这意味着您不应该假设system将永远成功。您的代码以这种方式变得不可靠。应该有适当的错误处理。

答案 1 :(得分:10)

警告意味着You did not check the return value of system(...)。 要避免此警告,只需检查返回值!

int systemRet = system(commandLine);
if(systemRet == -1){
  // The system method failed
}

这是因为system无法保证成功。

答案 2 :(得分:6)

库编写者将此函数声明为warn_unused_result,因为他们认为检查调用是否成功很重要。你的一个编译器标志告诉编译器检查这个,所以它会警告你。避免警告的正确方法是检查返回值并正确处理错误(即使它只是打印错误消息。在相关说明中,您应该检查snprintf的返回值以确保缓冲区很大够了。

答案 3 :(得分:0)

这不是错误,而是警告。

这只是说你没有检查system()来电的回复。

  

返回值

     

传递的参数返回的值不是NULL,   取决于运行环境规格。在许多系统中,0   用于表示命令已成功执行和   其他值表示某种错误。当论点通过时   为NULL,如果命令处理器,该函数返回非零值   是可用的,否则为零。

您不应该认为通话成功,并且对待失败。