2015-07-09 10 views
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); 
} 

Теперь я строю его:OracleSolaris 11.2 - простой файл ввода/вывода, предупреждение куб.см

$ 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

Я обновил свой вопрос с информацией о компиляторе. – Mark

+0

Из документов (http://docs.oracle.com/cd/E24457_01/html/E21990/bjapr.html#bjaqj) Я бы рискнул, что это ошибка компилятора. Можете ли вы обновить компилятор? –

ответ

0

У меня недостаточно репутации, чтобы добавить комментарий ... Это похоже на ошибку компилятора с парсером. Компиляция с более поздней версией cc не приводит к этой ошибке.

$ cc -V         
cc: Sun C 5.13 SunOS_i386 2014/10/20 
$ cc -errwarn=%all -o ~/tmp/aa ~/tmp/a.c 
$ 

В выходном куб.см, кажется, представил имя исходного файла сцепляются с остатком «-errwarn» тега «все», нечетной!

0

ошибка означает, что вы прошли неопознанный вариант -errwarn:

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

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

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

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