C语言中函数声明在主函数里面和主函数之前的区别
如题,请问两者有什么区别? 这涉及 作用域的问题。-代码块作用域(blocak scope {})
-文件作用域(file scope )
-原型作用域(prototype scope)
函数原型中声明的参数名 如:
void func(int a, int b, int c);
-函数作用域(function scope)
在主函数里面声明,在主函数里面有效。
在主函数之前,文件作用域 在当前文件有效
放在主函数外,从它的位置往下所有的函数都能调用该函数;而在主函数内,只有主函数能访问该函数 本帖最后由 威斯布鲁特 于 2017-6-30 17:33 编辑
声明函数,建议声明在主函数之前。虽然我在主函数内声明,与在主函数之前声明一样,其他函数也能调用,如图
也没有警告和错误,但建议声明在主函数之前。
补充一点,c语言也可以不声明调用函数,但会报警告:
implicit declaration of function 'starbar' [-Wimplicit-function-declaration]( 隐式申明函数)
这是代码:
#include <stdio.h>
#include <stdlib.h>
#define NAME "GIGATHINK, INC."
#define ADDRESS "101 Megabuck Plaza"
#define PLACE "Megapolis, CA 94904"
#define WIDTH 40
int main()
{
void starbar();
void test();
test();
printf("%s\n", NAME);
printf("%s\n", PLACE);
printf("%s\n", ADDRESS);
starbar();
return 0;
}
void starbar(void)
{
int count;
for(count = 1; count <= WIDTH; count++)
putchar('*');
putchar('\n');
}
void test(void)
{
starbar();
}
函数定义是函数声明的一种
好了 下一题 威斯布鲁特 发表于 2017-6-30 17:25
声明函数,建议声明在主函数之前。虽然我在主函数内声明,与在主函数之前声明一样,其他函数也能调用,如图 ...
我的回答是错误的,在主函数内声明,其他函数不能调用,我的碰巧通过,不符合c语言标准。 威斯布鲁特 发表于 2017-6-30 18:36
我的回答是错误的,在主函数内声明,其他函数不能调用,我的碰巧通过,不符合c语言标准。
完全符合标准
函数的定义是函数声明的一种 求道于盲 发表于 2017-6-30 19:43
完全符合标准
函数的定义是函数声明的一种
我把test()和starbar()定义顺序改下就通不过了,如下所示代码:
#include <stdio.h>
#include <stdlib.h>
#define NAME "GIGATHINK, INC."
#define ADDRESS "101 Megabuck Plaza"
#define PLACE "Megapolis, CA 94904"
#define WIDTH 40
int main()
{
void starbar();
void test();
test();
printf("%s\n", NAME);
printf("%s\n", PLACE);
printf("%s\n", ADDRESS);
starbar();
return 0;
}
void test(void)
{
starbar();
}
void starbar(void)
{
int count;
for(count = 1; count <= WIDTH; count++)
putchar('*');
putchar('\n');
}
贴图:
威斯布鲁特 发表于 2017-7-1 08:10
我把test()和starbar()定义顺序改下就通不过了,如下所示代码:
贴图:
不是说了么
定义是声明的一种
你把要调用的函数的实现写在前面
相当于有声明这个函数 求道于盲 发表于 2017-7-1 09:23
不是说了么
定义是声明的一种
你把要调用的函数的实现写在前面
嗯,这个我能理解。虽然c语言可以不用写声明,只要预先定义了函数就可以在其他地方调用。但把函数声明写写在main()函数前面,就不会报隐式函数声明警告,也不用考虑函数定义顺序了(但一般都考虑吧)。 威斯布鲁特 发表于 2017-7-1 23:57
嗯,这个我能理解。虽然c语言可以不用写声明,只要预先定义了函数就可以在其他地方调用。但把函数声明写 ...
我只是在说你前面的代码符合标准
规范的做法 会把函数声明写到自定义头文件里面
然后include
页:
[1]