1. 如果函数没有声明, 应该在调用前定义:
#include <stdio.h> /* 定义求大值函数 */ int MAX(int x, int y) { if (x > y) return x; else return y; } /* 定义求小值函数 */ int MIN(int x, int y) { return x < y ? x : y; } int main(void) { int a = 5; int b = 6; /* 调用函数 */ printf("%d\n", MAX(a,b)); printf("%d\n", MIN(a,b)); getchar(); return 0; }
2. 可以在函数头声明:
#include <stdio.h> int main(void) { int a = 5; int b = 6; /* 在函数头声明要使用的函数 */ int MAX(int x, int y); int MIN(int x, int y); /* 调用函数 */ printf("%d\n", MAX(a,b)); printf("%d\n", MIN(a,b)); getchar(); return 0; } /* 定义求大值函数 */ int MAX(int x, int y) { if (x > y) return x; else return y; } /* 定义求小值函数 */ int MIN(int x, int y) { return x < y ? x : y; }
3. 但一般应在文件头声明:
函数原型的声明在实际运用中, 会集中声明在头文件(*.h)里面.
#include <stdio.h> /* 在文件头声明要使用的函数 */ int MAX(int x, int y); int MIN(int x, int y); int main(void) { int a = 5; int b = 6; /* 调用函数 */ printf("%d\n", MAX(a,b)); printf("%d\n", MIN(a,b)); getchar(); return 0; } /* 定义求大值函数 */ int MAX(int x, int y) { if (x > y) return x; else return y; } /* 定义求小值函数 */ int MIN(int x, int y) { return x < y ? x : y; }
4. 函数可互调用, 但不能嵌套:
#include <stdio.h> void PrintSum(int x, int y); int sum(int x, int y); int main(void) { PrintSum(1,2); PrintSum(111,222); getchar(); return 0; } void PrintSum(int x, int y) { printf("%d + %d = %d;", x, y, sum(x,y)); putchar('\n'); } int sum(int x, int y) { return x + y; }
5. 关于无参数、无返回值的函数:
如果函数没有参数, 最好是 fun(void), 不过 fun() 也行;
如果函数没有返回值, 要注明返回类型是 void;
在 C 语言中调用无参函数也要带括号.
#include <stdio.h> void prn(void); int main(void) { prn(); /* 调用无参函数 */ getchar(); return 0; } void prn(void) { printf("ok\n"); }
6. 声明函数时可以省略形参:
#include <stdio.h> int sum(int, int, int); /* 省略形式参数 */ int main(void) { printf("%d\n", sum(1,2,3)); getchar(); return 0; } int sum(int x, int y, int z) { return(x + y + z); }
7. 函数的参数一般不要超过 7 个:
但 C99 可以支持到 127 个参数.
#include <stdio.h> int sum(int, int, int, int, int, int, int); int main(void) { printf("%d\n", sum(1,2,3,4,5,6,7)); getchar(); return 0; } int sum(int a, int b, int c, int d, int e, int f, int g) { return(a + b + c + d + e + f + g); }