0
#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

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

4

2 回答 2

0

该错误意味着您已将无法识别的选项传递给 -errwarn:

% cc -errwarn=%mumblefrotz -o hello hello.c
warning: bad message tag: %mumblefrotz

%在将命令/export/home/rmashak/tmp/a.c传递给编译器之前,您的 shell 似乎以某种方式将其转换为。看起来像 zsh 之类的一些 shell 可能会%在命令处理中专门扩展符号 - 检查文档以了解您使用的任何 shell。

如果您使用的是最新版本的 Solaris Studio,则%可以选择避免此类问题 - 您可以将命令更改为:

cc -errwarn=all -o ~/tmp/aa ~/tmp/a.c
于 2015-07-27T16:30:47.007 回答
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”的其余部分连接起来,奇怪!

于 2015-07-27T13:37:21.793 回答