在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有另一个相似的单词, 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尝试运行函数而不是定义或声明它。
定义一个函数和声明它之间的区别很有意思,并且当你对C有点习惯时可能最好保存。
你的程序不会调用printSum
,它只是声明它。 改变这一行:
void printSum(void);
至
printSum();
如果您的源文件中的函数与您在此处放置的顺序相同,那么您还需要转发声明或将printSum
的实现printSum
之上printSum
正确的。
你应该考虑一本初学C书。
void printSum(void);
实际上没有调用函数,它只是声明它存在。 你需要这样做,所以编译器将知道如何调用它,即使它尚未定义,所以留下该行。但要实际调用该函数,您需要:
printSum();
因为而不是实际调用函数,你只是声明它。 要调用该函数,您只需要函数名称和参数列表,在本例中为空:
printSum();
下列:-
void printSum(void);
不是函数调用。 这是一个function声明。
printSum();
是一个函数调用。 你还应该在main之前转发声明函数。