排除头文件是否是语法错误的一部分?

时间:2015-09-01 04:00:45

标签: c compiler-errors c-preprocessor preprocessor-directive

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

现在我还没有提到任何文件的名称,因此它是编译时错误的一部分,或者预处理器会处理它,即。可以将这个头文件的排除视为编译时错误(语法错误)的一部分吗?

3 个答案:

答案 0 :(得分:4)

ISO C标准规定了预处理器编译器阶段的行为,有各种转换阶段构成整个“链”(详见C11 5.1.1.2 Translation phases)。 / p>

由于标准C11 6.10.2 Source file inclusion明确指出include指令的格式必须是以下形式之一:

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

(后者需要进行宏替换,但最后需要作为前两种形式之一),这意味着你所拥有的绝对是语法错误。

答案 1 :(得分:3)

该标准支持三种形式的#include

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

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

# include pp-tokens new-line

需要注意的是,最后一个表单必须转换为前两个表单之一。

您的代码不是以上三种形式中的任何一种。因此,这是不合法的。

答案 2 :(得分:0)

  1. #include由C预处理器处理。

  2. 该行

    #include
    

    不完整。

  3. 预处理失败。

  4. 结论:

    不,这不会导致&#34;编译错误&#34; (因为甚至没有达到编译阶段)但是处理器前错误。