在C中,我试图从main调用函数printSum。但主要功能是不调用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);
}
萨姆
答案 0 :(得分:7)
你再次定义了.. 只需从函数中删除void。 包括一个前置声明的标题,以便识别它..
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);
}
答案 1 :(得分:3)
看起来你刚刚开始使用C.希望你有一些其他语言的经验,因为C有一个陡峭的学习曲线。无论如何,重要的是要注意关于C的一些事情。首先是void printSum(void);
的真正含义。打破它:
void printSum(void);
这声明了一个返回签名。换句话说,该功能会给你什么。在C中,单词void
基本上意味着“无变量”。请特别记住。为什么?因为C有另一个相似的词NULL
。 NULL
表示“没有价值”。这是另一种看待它的方式。
一些有效变量:int
,float
,bool
,void
一些有效值:1
,'c'
,2.0f
,NULL
实际上,NULL
实际上只是数字0
。从字面上看。 NULL == 0
将返回true。
继续......
void printSum (void);
这定义了项目的名称。
void printSum ( void );
括号表示这是一个函数。
void printSum( void );
这表示传递给系统的变量。所以这个可以是int,float等。
void printSum(void);
分号代表声明的结尾。这个概念解释起来有点棘手,但只是把它想象成一个句子。
现在,重要的一点是第一个void
。如果你告诉C函数返回什么样的东西,它假设你在谈论函数,而不是实际调用它。省略第一个void使C尝试运行函数而不是 define 或声明它。
定义一个函数和声明它之间的区别很有意思,当你更习惯于C时,最好保存它。
答案 2 :(得分:2)
您的程序不会调用printSum
,它只是声明它。改变这一行:
void printSum(void);
到
printSum();
如果您的源文件中的函数与放在此处的源文件的顺序相同,那么您还需要转发声明或移动printSum
上main
的实现是正确的。< / p>
你应该考虑一本初学C书。
答案 3 :(得分:2)
void printSum(void);
实际上没有调用函数,它只是声明它存在。你需要这样做,所以编译器将知道如何调用它,即使它还没有被定义,所以留下那一行。但是要实际调用该函数,你需要:
printSum();
答案 4 :(得分:0)
因为不是实际调用函数,而是宣告它。要调用该函数,您只需要函数名称和参数列表,在本例中为空:
printSum();
答案 5 :(得分:0)
以下内容: -
void printSum(void);
不是函数调用。这是一个功能声明。
printSum();
是一个函数调用。您还应该在main之前声明该函数。