Ошибка использования NULL в C файлах в Vim с Syntastic - PullRequest
2 голосов
/ 02 мая 2020

Heyo!

Я уже некоторое время использую плагин проверки синтаксиса Syntasti c и действительно наслаждаюсь этим, за исключением одной раздражающей ошибки, которую я не могу понять, как устранить.

Каждый раз, когда я пытаюсь использовать NULL в моих C программах, я получаю сообщение об ошибке, обозначаемое красным " >> ", и сообщение об ошибке с надписью "use of undeclared identifier 'NULL' [undefined:]"

image> Ссылка на скриншот проблемы << ">

У меня нет проблем с использованием заголовочных файлов, и программа компилируется без проблем. Просто визуально довольно раздражает видеть кучу флагов ошибок, когда я я пытаюсь реализовать структуры данных, которые используют NULL-указатели или NULL для обозначения свободного места.

Я использую компилятор g cc и установил параметры компиляции в моем vimr c для:

let g:syntastic_c_compiler_options= '-std=c18'

(ничего не изменится, если я удалю строку из моего vimr c и позволю ей вернуться к значению по умолчанию -gnu99, как установлено в файлах конфигурации syntacti c syntax-checkers в ~/.vim/plugged/syntastic/syntax_checkers/c/gcc.vim)

Вывод :SyntasticInfo:

Syntastic version: 3.10.0-7 (Vim 802, Linux, GUI)
Info for filetype: c
Global mode: active
Filetype c is active
The current file will be checked automatically
Available checkers: gcc make
Currently enabled checkers: gcc

Надеялся, что кто-то здесь имел дело с подобной проблемой или имел какие-то идеи для обхода.

Заранее спасибо !!

РЕДАКТИРОВАТЬ 1: Syntasti c команды конфигурации в * 10 32 *


"Syntastic settings

let g:syntastic_always_populate_loc_list = 1
let g:syntastic_auto_loc_list = 1
let g:syntastic_check_on_open = 1
let g:syntastic_check_on_wq = 0

"C Settings

let g:syntastic_c_compiler = 'gcc'
let g:syntastic_c_checkers=['gcc']
let g:syntastic_c_include_dirs=['/usr/lib/gcc/x86_64-pc-linux-gnu/9.3.0/include']
let g:syntastic_c_auto_refresh_includes = 1
let g:syntastic_c_compiler_options= '-std=c18'
let g:syntastic_c_check_header = 1


Добавляя это для помощи в диагностике, я должен сказать большое спасибо всем, кто высказал свое мнение и пытается помочь мне!

РЕДАКТИРОВАТЬ 2:

Я отредактировал параметры компилятора так:

let g:syntastic_c_compiler_options= '-I/usr/lib/gcc/x86_64-pc-linux-gnu/9.3.0/include -Wall -std=c18'

, основываясь на предложении @ user3629249. Теперь ошибка необъявленного идентификатора 'NULL' отображается в окне: Ошибки (это можно отнести к флажку -Wall). Но прогресс есть прогресс :). Просто нужно понять, как настроить Syntasti c, чтобы понять, что NULL на самом деле определен в <stddef.h>.

1 Ответ

0 голосов
/ 03 мая 2020

Проблема заключалась в том, что файл stddef.h не был доступен Syntasti c, поскольку он находился глубоко в папке gcc (см. Выше), а не в /usr/include. Создание копии stddef.h и размещение ее в /usr/include, похоже, решило проблему, с которой я столкнулся при использовании NULL. Надеюсь, это не создаст никаких дальнейших проблем; D.

Еще раз спасибо всем за их вклад, и я надеюсь, что это может спасти кого-то от головной боли в будущем :).

...