3

我有以下书籍记录程序

#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  
}  

在函数声明以及定义中遇到错误:

error: expected ‘{’ before ‘(’ token
error: two or more data types in declaration specifiers

这里有什么问题?

4

6 回答 6

2

unionC中的保留关键字,因此您不能将该名称用于函数。如果我们看一下C99 标准草案1节中的关键字说:6.4.1

关键词:其中之一

并包括union作为列表的一部分,在第2段中说:

上述标记(区分大小写)保留(在翻译阶段 7 和 8 中)用作关键字,否则不得使用。[...]

还有一些其他问题,main需要退货int。标准部分5.1.2.2.1 Program startup说(强调我的):

程序启动时调用的函数名为 main。实现没有声明这个函数的原型。它应定义为返回类型 int [...]

和你的函数的声明和定义是不同的。该定义还有一个int参数:

void union(struct books *list1,struct books *list2,struct books *list3,
            int n1,int n2)  
                  ^^^^^^^
于 2013-10-24T18:32:53.350 回答
2

union是 C 中的保留关键字。尝试选择另一个函数名称。

于 2013-10-24T18:33:13.933 回答
2

你不应该使用union作为函数名。它是reserved keywordC 中 的

检查C语言保留的关键字

保留关键字的含义已经定义,不能重新定义为其他含义。在命名函数和变量时,除了这些名称之外,您还可以为变量、函数等选择合理长度的名称。

编辑

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

于 2013-10-24T18:33:35.417 回答
1

union是 C 中的保留关键字。您可以尝试为您的函数获取其他名称

您的返回类型也main应该是int

于 2013-10-24T18:33:53.877 回答
1

您对 union 的定义,在三个成员之间使用,并且在每个成员声明中都不包含变量名,并且使用 是不正确的void,因为您声明的是变量而不是函数:

void union(struct books *,struct books *,struct books *,int);

如果您使用;代替,并包含成员名称,它会编译:

union {struct books *a;struct books *b;struct books *c;int d;} ;   

另一方面,如果您正在对函数进行原型设计,则union它在 C 中被保留,并且不能用作函数名称。选择不同的名称,则可以使用,分隔符,不必在每个参数中使用变量名,并且可以返回 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;
}
于 2013-10-24T18:41:07.250 回答
1

首先,'union' 是保留关键字,因此请更改您的函数名称。其次,因为 main 也是一个函数,程序的执行从该函数开始在 main 之前写入 void 或 int。如果您声明 void main ,则不要返回任何值,但如果您选择 int main 则在程序结束时返回任何整数值。

于 2014-02-12T10:57:00.033 回答