在我的程序中,我将此代码用于指示程序生成命令。这可以用来在我的程序中使用键启动另一个程序,例如生成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]
答案 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,如果命令处理器,该函数返回非零值 是可用的,否则为零。
您不应该认为通话成功,并且对待失败。