Eclipse: несоответствие между синтаксической раскраской / анализ кода и навигация по коду - PullRequest
0 голосов
/ 06 октября 2019

У меня есть проект под Eclipse, версия: 2018-09 (4.9.0), идентификатор сборки: 20180917-1800. Использование GCC MinGW toolchain под Msys2 от PortableApps, Win 10.

В одном из исходных файлов показана следующая подсветка синтаксиса:

enter image description here

Парсер выдает ошибку в строке 241. При наведении курсора мыши на стрелку слева отображается всплывающая подсказка: Invalid arguments ' Candidates are int mkdir(const char *)'

Теперь, если я Ctrl + щелчок по mkdir, он переходит в системный файлio.h с прототипом

  int __cdecl mkdir (const char *) __MINGW_ATTRIB_DEPRECATED_MSVC2005;

Полагаю, он идет к месту нахождения кандидата. Если моя интерпретация верна, то до сих пор это кажется последовательным (но несовместимым с компиляцией, он может найти правильный заголовок для mkdir).

Теперь, следуя моему комментарию Я сделал Project -> Свойства -> C / C ++ Общие -> Анализ кода -> Использовать настройки проекта -> Синтаксические и семантические ошибки -> Недопустимые аргументы (снять отметку, Применить и закрыть). Теперь стрелка исчезла, mkdir по-прежнему отображается красным, как если бы это была неизвестная функция, но нет связанной ошибки, и зависание над mkdir Я вижу документацию, показанную ниже. Это кажется непоследовательным поведением в Eclipse's Code Analysis / окрашивании синтаксиса и навигации по коду. Почему это несоответствие? Как его удалить? Это ошибка в Eclipse?

Документация относится к файлу sys/stat.h. В моем Msys2 я нахожу файлы

/mingw64/x86_64-w64-mingw32/include/sys/stat.h
/usr/include/sys/stat.h

grep ping этих файлов, первый не имеет mkdir, в то время как второй имеет

int     mkdir (const char *_path, mode_t __mode );

Это кажетсябыть правильным прототипом. Но Ctrl + Click по-прежнему идет (неправильный заголовок) io.h. Где читается документация? Как настроить Eclipse для правильной навигации по нему? Что делает Eclipse, когда отмеченный флажок «Недопустимые аргументы» отмечен / снят?

В целом я не мог понять связь между Анализом кода, Навигацией по коду, Индексом проекта (перестроение индекса), Индексом проекта (Освежить все файлы), Обновлением проекта, Подсветкой синтаксиса, настройкойупомянутый флажок (и другие) и пути, по которым различные компоненты Eclipse ищут код.

Я знаю о функции автоматического обнаружения (например), но я не нашел объяснения с требуемым уровнем детализациичтобы понять эту проблему.


TL; DR

mkdir документация, отображаемая в виде всплывающей подсказки:

Name: mkdir
Prototype: int mkdir (const char *filename, mode_t mode)
Description:
The mkdir function creates a new, empty directory with name filename. 

The argument mode specifies the file permissions for the new directory file. , for more information about this. 

A return value of 0 indicates successful completion, and -1 indicates failure. In addition to the usual file name 
 syntax errors , the following errno error conditions are defined for this function: 


EACCES   Write permission is denied for the parent directory in which the new directory is to be added. 


    - EEXIST A file named filename already exists. 


    - EMLINK The parent directory has too many links (entries). 

Well-designed file systems never report this error, because they permit more links than your disk could 
 possibly hold. However, you must still take account of the possibility of this error, as it could result from 
 network access to a file system on another machine. 


    - ENOSPC The file system doesn't have enough room to create the new directory. 


    - EROFS The parent directory of the directory being created is on a read-only file system and cannot 
     be modified. 

To use this function, your program should include the header file sys/stat.h. 
Header files:
sys/stat.h

Примечание 1: Все это независимо от того, что на самом деле делает компилятор при компиляции (что ... без ошибок). Но это другая проблема.

Примечание 2: Я обнаружил несколько других случаев несоответствия между отчетами Code Analysis и действиями компилятора, что также нежелательно.

Примечание 3:Связанная информация Я нашел

  1. Этот связанный случай был ошибкой в ​​Eclipse CDT.

  2. This была еще одна связанная ошибка.

  3. Это .

...