OracleSolaris 11.2 - 简单文件I / O,cc警告

时间:2015-07-09 14:35:19

标签: file-io solaris opensolaris

#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

它确实执行得很好,但是所有的警告都是什么?

2 个答案:

答案 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