#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int main(void)
{
int fd;
fd = open("abc.txt", O_RDONLY);
if (fd < 0)
{
exit(EXIT_FAILURE);
}
printf("fd %d\n", fd);
close(fd);
exit(EXIT_SUCCESS);
}
现在我建立它:
$ cc -errwarn=%all -o ~/tmp/aa ~/tmp/a.c
warning: bad message tag: /export/home/rmashak/tmp/a.call
$ cc -V
cc: Sun C 5.12 SunOS_i386 2011/11/16
它确实执行得很好,但是所有的警告都是什么?
答案 0 :(得分:0)
我没有足够的声誉来添加评论......这看起来像解析器的编译器错误。使用更高版本的cc进行编译不会产生此错误。
$ cc -V
cc: Sun C 5.13 SunOS_i386 2014/10/20
$ cc -errwarn=%all -o ~/tmp/aa ~/tmp/a.c
$
在你的输出中,cc似乎显示了源文件名与'-errwarn'标签'all'的其余部分连接在一起,奇怪!
答案 1 :(得分:0)
错误表示您已将无法识别的选项传递给-errwarn:
% cc -errwarn=%mumblefrotz -o hello hello.c
warning: bad message tag: %mumblefrotz
看起来你的shell以某种方式将命令中的%
转换为/export/home/rmashak/tmp/a.c
,然后再将其传递给编译器。看起来像某些shell(例如zsh)可能会在命令处理中扩展%
个标志 - 检查文档以查找您使用的任何shell。
如果您使用的是最新版本的Solaris Studio,%
是可选的以避免此类问题 - 您可以将命令更改为:
cc -errwarn=all -o ~/tmp/aa ~/tmp/a.c