使用#include"时出错"代码块中的指令

时间:2016-01-11 13:28:50

标签: c struct include header-files declaration

我对编程很陌生,所以这可能是一个愚蠢的问题。

我试图将我的结构放在一个单独的头文件中但是当我这样做时,我收到了这个错误:

  

main.c | 3 |错误:预期';',标识符或'('之前' int'   ===构建失败:1个错误,0个警告(0分钟,0秒(秒))===

这是来自 main.c 的代码:

#include "struct.h"

int main(void){

    return 0;
}

这是 struct.h

struct test{

    int a;
}

4 个答案:

答案 0 :(得分:2)

您的结构后缺少;

应该是

struct test {
    int a;
};

答案 1 :(得分:1)

问题在#include语句中,而在 struct.h 文件本身。

您忘记在;声明后添加struct

要引用,C11标准,章节§6.7.2.1,结构和联合说明符struct声明的语法是

  

结构声明:
   specifier-qualifier-list struct-declarator-list opt ;

请注意最后的;

因此,您的结构声明应该类似于

struct test {
int a;
};  // note the ; here

答案 2 :(得分:0)

在您的情况下,如其他答案所述,您在struct声明后缺少分号。

当编译器看到

时,可能并不十分清楚
#include "file.h"

它用file.h的内容替换该行(包括换行符),但没有多少检查超出预处理能力。特别是file.h不必自行编译。所以这个:

file1.h:

struct test{

int a;

file2.h:

};

并在file.c中

#include "file1.h"
#include "file2.h"

int main() { /* etc */ }

是完全合法的(虽然它看起来更像是一个混淆代码竞赛的条目)。

实际上,标准(无论如何都是C ++ 11)表明,如果包含文件没有以换行符结尾,则效果未定义,编译器可能(或可能不)加入最后一行包含文件与源代码的下一行,这可以带来各种乐趣。

这一点的长短 - 如果您在#include之后立即在源代码中出现意外错误,请检查#include文件的末尾是否有错误,因为这可能是问题所在是。

答案 3 :(得分:0)

在头文件struct.h中,以分号结束结构。

您的代码应运行正常。

说明: -

结构具有以下语法: -

struct <structure-name> {
.
.
elements
.
.
}; // must end with semi-colon

并使用以下语法声明它的对象: -

struct <structure-name> <object-name>;

希望有所帮助。