为什么我们在第二行int add(int,int)
语句后使用分号。
#include<stdio.h>
int add(int,int);
int main()
{
int a,b,c;
scanf("%d %d",&a,&b);
c=add(a,b);
printf("The sum of the 2 numbers is %d",c);
return 0;
}
int add(int x,int y)
{
int sum;
sum=x+y;
return sum;
}
答案 0 :(得分:5)
在C语法中,声明的定义方式如下
declaration:
declaration-specifiers init-declarator-listopt ;
^^^
正如您所见,分号是必需的。
这个
int add(int,int);
是一个函数声明。因此,您必须在声明的末尾放置一个分号。
比较两个程序
int main( void )
{
int add( int x, int y )
{
//...
}
}
和
int main( void )
{
int add( int x, int y );
{
//...
}
}
第一个程序无效,因为编译器会认为函数add
是在函数main
中定义的。
第二个程序有效。 main
中有一个函数声明和一个代码块。
因此需要使用分号来解除其他程序结构的声明。
答案 1 :(得分:2)
int add(int, int);
这是一个前向声明 - 它是一种告诉编译器的方法“有一个名为'add'的函数需要两个整数,所以如果你看到我使用它只是信任我,我将在以后定义它”。因为你还没有定义它,所以你不需要{}
花括号。分号出现在C中每行代码的末尾,但在某些大括号之后(例如if语句,函数定义)除外。因此,在前瞻声明之后仍然需要一个分号。
答案 2 :(得分:1)
C中的分号结束语句。所以分号告诉C声明add函数的语句已经终止,后面的任何内容都是新语句。
在这种情况下,这是一个函数声明,分号表示没有更多的预期。如果没有分号,那么花括号中的函数定义就像main() {...}
答案 3 :(得分:0)
如果没有分号,编译器需要一个函数定义(以开括号开头)或逗号将一个定义与下一个定义分开。
答案 4 :(得分:0)
分号只是一个终止字符。由于没有定义函数的主体(例如,与main() { ... }
不同),这是让编译器知道不期待任何其他内容的一种方式。
答案 5 :(得分:0)
了解C / C ++中的声明和定义很重要。当您声明变量或函数时,您告诉编译器有一些名称已指定类型的名称。编译器不必完全定义变量或函数。
在该示例中,首先声明函数然后定义该函数。声明语句的语法应包含分号。
通过阅读以下内容,您可以获得更清晰的概念:http://www.cprogramming.com/declare_vs_define.html
答案 6 :(得分:0)
这是必要的历史原因,最初,在K&amp; R C中,add()
本来是这样写的:
int add()
int x;
int y;
{
return x+y;
}
在原型之后没有分号,很难区分它:
int add();
int x;
int y;
{
/* A nested block. */
}
请记住,C预处理器是一维的,并将程序转换为由空格分隔的标记列表。解析器无法看到换行符或缩进来猜测你的意思。
另外,C中的语句通常以分号结尾,并且比编程人员记住一堆任意异常更容易保持一致。