在C中,从main调用函数

在C中,我试图从main调用函数printSum。 但主要function是不调用printSum,它只打印出“嗨!” 这是来自main的打印声明。 我不确定为什么没有调用printSum。 谢谢。

码:

int main(void){ void printSum(void); printf("Hi!\n"); return 0; } void printSum (void){ printf("Please give two integers\n"); int x,y; scanf("%d %d", &x,&y); printf("%d + %d is %d\n",x,y,x+y); } 

山姆

你再次定义它..只需从函数中删除空格。 包括一个前向声明的标题,以便它识别它..

 void printSum (void); <------------------- int main(void){ printSum(); <------------------------- printf("Hi!\n"); return 0; } void printSum (void) { printf("Please give two integers\n"); int x,y; scanf("%d %d", &x,&y); printf("%d + %d is %d\n",x,y,x+y); } 

看起来你刚刚开始使用C.希望你有一些其他语言的经验,因为C有一个陡峭的学习曲线。 无论如何,重要的是要注意关于C的一些事情。首先是void printSum(void); 真正意思。 打破它:

void printSum(void);

这声明了一个返回签名。 换句话说,该function会给你什么。 在C中,单词void基本上表示“无变量”。 请特别记住。 为什么? 因为C有另一个相似的单词, NULLNULL表示“没有价值”。 这是另一种看待它的方式。

一些有效变量: intfloatboolvoid一些有效值: 1'c'2.0fNULL

实际上, NULL实际上只是数字0 。 从字面上看。 NULL == 0将返回true。

继续…

void printSum (void);

这定义了项目的名称。

void printSum void ;

括号表示这是一个函数。

void printSum( void );

这表示传递给系统的变量。 所以这可能是int,float等。

void printSum(void) ;

分号表示语句的结尾。 这个概念解释起来有点棘手,但只是把它想象成一个句子。

现在,这里重要的是第一个void 。 如果你告诉C函数返回什么样的东西,它假设你在谈论函数,而不是实际调用它。 省略第一个void使C尝试运行函数而不是定义声明它。

定义一个函数和声明它之间的区别很有意思,并且当你对C有点习惯时可能最好保存。

你的程序不会调用printSum ,它只是声明它。 改变这一行:

 void printSum(void); 

 printSum(); 

如果您的源文件中的函数与您在此处放置的顺序相同,那么您还需要转发声明或将printSum的实现printSum之上printSum正确的。

你应该考虑一本初学C书。

 void printSum(void); 

实际上没有调用函数,它只是声明它存在。 你需要这样做,所以编译器将知道如何调用它,即使它尚未定义,所以留下该行。但要实际调用该函数,您需要:

 printSum(); 

因为而不是实际调用函数,你只是声明它。 要调用该函数,您只需要函数名称和参数列表,在本例中为空:

 printSum(); 

下列:-

 void printSum(void); 

不是函数调用。 这是一个function声明。

 printSum(); 

是一个函数调用。 你还应该在main之前转发声明函数。