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', странно!