c语言声明函数位置 c语言声明函数和定义函数( 七 )


int main();
它的返回值是int类型,不需要传参数 。
printf()函数的声明是这样的:int printf(const char* fmt, ...);
它的返回值是int类型,第一个参数是格式字符串,之后可以跟可变参数 。
函数声明的语法是:
返回值类型 函数名(形参类型0 形参变量0, 形参类型1 形参变量1);
如果有多个形参,就以逗号隔开 。每个形参都有类型和变量名,其中形参变量名在声明时可以省略 。最后以分号结尾,结束声明语句 。
如果不想让人看到函数的源码,就可以只提供一个声明和一个编译后的文件 , 这样别人就只能看汇编码c语言声明函数位置了(笑) 。C语言的这个设计 , 对保护知识产权还是有利的 。
函数定义,就是在声明之后不跟分号,而是以大括号表示函数体,把函数的具体代码写在大括号内部 。
上图中的main()函数就是定义,printf()函数是声明 。
定义,实现的是函数的内容 。函数是不能多次定义的,否则编译器不知道采用哪个定义的代码 。
但函数可以多次声明,只要声明都是一样的 , 不互相矛盾 。
只要打了两个大括号{},就算定义了函数 。空实现也是实现,可以先占住这个位置,以后再填写具体的函数代码 。即,先给出整个程序的框架来 , 然后再填写细节 。
在实现了函数之后 , 必须去调用它,它才会运行 。
除了main函数是被shell启动的,其他函数都要直接或间接被main函数调用 。
某一个函数在运行时,实际是存在一条从main函数到它的调用链的 。
函数调用的语法是:
函数名(实参变量0, 实参变量1);
如果有多个实参,则以逗号隔开 。如果要接收函数调用的返回值 , 可以用一个变量去接收:
返回值变量 = 函数名(实参变量0, 实参变量1);
返回值变量的类型,要与函数的返回值类型一致,(返回值变量)在使用之前要先声明 。
对于有返回值的函数,也可以不接收它的返回值 。例如 , printf()虽然有个int类型的返回值,用于表示打印了多少个字符,但一般不接收它 。
所以C语言的入门代码都是printf("hello world\n");
而不是int ret = printf("hello world\n");
函数名,在C语言中属于标志符(identity) 。
标志符的命名规则是,以下划线或大小写字母开始,之后可以跟数字、字母、下划线,(但不能跟运算符或其他特殊符号) 。
它们在代码中用于表示变量名、结构体类型名、函数名 , 或者给goto使用的标号 。
基本类型的类型名,都被定义为了关键字,不能再用作标志符 。
struct S {
int a;
int b;
} s;
S是标志符,表示结构体类型S 。
a是标志符,表示结构体的成员变量a 。
s是标志符,表示变量s,它的类型是结构体类型S 。
函数名,也属于标志符 , 所以函数名也要以下划线或大小写字母开始,不能是关键字、运算符、或其他特殊符号 。
0123,这不能做函数名,C语言的以0开始的数字是八进制数字 。
0x123,也不能做函数名,以0x开始的数字是16进制的数字 。
main , 可以做函数名,这是主函数,在整个程序里只能有一个,不能作为普通函数的名字 。
__schedule , 以下划线开始,可以做函数名 。
不过,以两个下划线开始的函数,大多是Linux系统或C库的函数 。普通函数最好别这么命名 。
char,这不能做函数名,它是字符类型的关键字 。
+,这也不能,它是表示加法的运算符 。
CreateWindowEx , 这可以做函数名,一看就是典型的匈牙利风格,微软的代码(笑) 。这个函数是windows系统上创建窗口的API 。

推荐阅读