OracleSolaris 11.2 - простой файловый ввод / вывод, предупреждение cc

#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 ответа

Ошибка означает, что вы передали нераспознанную опцию -errwarn:

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

Похоже ваша оболочка как-то преобразована % в вашей команде в /export/home/rmashak/tmp/a.c перед передачей его компилятору. Похоже, что некоторые оболочки, такие как zsh, могут расширяться % Знаки специально при обработке команд - проверьте документы на предмет того, какую оболочку вы используете.

Если вы используете последние версии Solaris Studio, % необязательно, чтобы избежать подобных проблем - вместо этого вы можете изменить свою команду на:

cc -errwarn=all -o ~/tmp/aa ~/tmp/a.c

У меня недостаточно репутации, чтобы добавить комментарий... Это похоже на ошибку компилятора в парсере. Компиляция с более поздней версией 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', странно!

Другие вопросы по тегам