0
#include 
int main() 
{ 
//code 
return 0; 
} 

Теперь я не упомянул имя какого-либо файла, так что это часть ошибки времени компиляции или препроцессор позаботится об этом, т. Е. может ли это исключение заголовочного файла считать частью ошибки времени компиляции (синтаксическая ошибка) или нет?Исключает ли заголовочный файл часть синтаксической ошибки или нет?

+1

Что ваш компилятор говорит об этом? Моя говорит мне довольно ясно, что он думает об этом коде. – kaylum

ответ

4

стандарт ISO C определяет поведение как препроцессор и этапов компилятора, существуют различные этапы перевода, которые составляют всю «цепочку» (см C11 5.1.1.2 Translation phases для подробностей).

Поскольку стандартный C11 6.10.2 Source file inclusion конкретно указывается формат директивы включения должна быть одна из форм:

# include <h-char-sequence> new-line 
# include "q-char-sequence" new-line 
# include pp-tokens new-line 

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

3

Стандарт поддерживает три формы: #include.

# include <h-char-sequence> new-line 

# include "q-char-sequence" new-line 

# include pp-tokens new-line 

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

Ваш код не относится к трем формам. Следовательно, это не является законным.

0
  1. #include обрабатывается предварительным процессором C.

  2. Линия

    #include 
    

    является неполным.

  3. Предварительная обработка не удалась.

Вывод:

Нет, это не приведет к «компилятором ошибки» (как составление фазы даже не достиг), но в предварительной обработки ошибок.

Смежные вопросы