我有以下书籍记录程序
#include <stdio.h>
#include <string.h>
#define SIZE 7
struct books{
char name[100],author[100];
int year,copies;
};
struct books book1[SIZE],book2[SIZE],book3[SIZE],*list;
void union(struct books *,struct books *,struct books *,int);
main()
{
//code here
}
void union(struct books *list1,struct books *list2,struct books *list3,int n1,int n2)
{
//code here
}
我在函数声明和defination 中收到错误:
error: expected ‘{’ before ‘(’ token
error: two or more data types in declaration specifiers
这里有什么问题?
答案 0 :(得分:2)
union
是 C 中的reserved keyword,因此您无法将该名称用于某个功能。如果我们查看段落 1 中的draft C99 standard部分6.4.1
关键字,请说:
关键字:
之一
并将 union 作为列表的一部分,并在段落 2 中说:
保留上述令牌(区分大小写)(在翻译阶段7和8中)以供使用 关键字,不得以其他方式使用。[...]
还有一些其他问题,main
需要返回int
。标准部分5.1.2.2.1
计划启动表示(强调我的):
程序启动时调用的函数名为main。实施宣布否 这个功能的原型。 应使用返回类型int [...]
进行定义
你和函数的声明和定义是不同的。该定义还有一个int
参数:
void union(struct books *list1,struct books *list2,struct books *list3,
int n1,int n2)
^^^^^^^
答案 1 :(得分:2)
union
是C中的保留关键字。尝试选择其他函数名称。
答案 2 :(得分:2)
您不应将union
用作函数名称。它是C中的reserved keyword
检查Keywords reserved by the C language
已定义保留关键字含义,并且无法将其重新定义为其他任何内容。 在命名除了这些名称之外的函数和变量时,可以为变量,函数等选择合理长度的名称。
修改强>
void union(struct books *,struct books *,struct books *,int); //declaration
void union(struct books *list1,struct books *list2,struct books *list3,int n1,int n2) //definition
^^
{
}
你在定义中有一个额外的参数修改声明或定义。
同时使用返回类型main()
定义int
。
答案 3 :(得分:1)
union是C中的保留关键字。您可以尝试为您的函数获取其他名称
main
的返回类型也应为int
答案 4 :(得分:1)
你对union的定义是在三个成员之间使用,
,并且在每个成员声明中都不包含变量名,并且使用void
是不正确的,因为你声明了变量,而不是函数:
void union(struct books *,struct books *,struct books *,int);
如果您使用;
代替,
并包含成员名称,则会进行编译:
union {struct books *a;struct books *b;struct books *c;int d;} ;
另一方面,如果您正在对函数进行原型设计,则{C}中保留union
,并且不能将其用作函数名称。选择一个不同的名称,然后您可以使用,
分隔符,而不必在每个参数中使用变量名称,并且可以返回void:
void unionName(struct books *,struct books *,struct books *,int); //this is a legal function prototype.
如果是你正在使用的函数原型,请确保原型与下面的函数定义匹配,目前它不符合:
//prototype
union (struct books *,struct books *,struct books *,int d) ;
//definition
void union(struct books *list1,struct books *list2,struct books *list3,int n1,int n2)
{
//some code
}
此外,main()
最好写成:
int main(void)
{
//some code...
return 0;
}
答案 5 :(得分:1)
首先,'union'是保留关键字,因此请更改您的函数名称。 其次,main也是一个函数,从你的程序执行开始,在main之前写入void或int。如果你声明void main那么,不要返回任何值,但如果你选择int main,那么在你的程序结束时返回任何整数值。