C语言函数书写

来源:互联网 发布:淘宝联盟优惠卷设置 编辑:程序博客网 时间:2024/06/08 16:21

1.声明与定义

extern int a;

声明的a为全局变量(即使声明在函数体内)。

2.函数参数的求值顺序依赖编译器的实现(最好不写K,填入值)

K=k++ + k++;(后置操作不会立即反应到K;而前置++k立即实现反应到k)

K=2   + 2  ;  k=6;

顺序点:1&&  ||  ?  ;  以及逗号表达式的每个运算之后


2)函数调用中对所有实际参数的求值完成之后(进入函数之前)

 

i的值为从内存k处取,j的值为k先付给j然后在++

3.函数缺损

C语言默认没有类型的函数参数为int

 

4.可变参数(实现依赖于stdarg.h

1)可变参数必须从头到尾按照顺序一一访问

2)至少存在一个确定的命名参数

3)无法判断参数数量

4)无法判断参数实际类型

#include <stdio.h>

#include <stdarg.h>

float average(int n, ...)

{

    va_list args;

    int i = 0;

    float sum = 0;

    va_start(args, n);

    for(i=0; i<n; i++)

    {

        sum += va_arg(args, int);

    }

    va_end(args);

    return sum / n;

}

int main()

{

    printf("%f\n", average(5, 1, 2, 3, 4, 5));

    printf("%f\n", average(4, 1, 2, 3, 4));

    return 0;

}

5.宏与函数

宏可以包含类型(int);

#define MALLOC(A,B) (A*)malloc(sizeof(A)*B)

宏的效率高,易出错;

函数效率低,不易错。

6.调用约定(使用.so库文件时,调用不同的开发者函数)

 

7.递归

需要一个出口,否则栈会溢出;

必须有判断语句(if)。

8.函数规范

1)函数中,如果参数为指针,且作为输入参数,该参数类型前加const;

2)不可忽略返回类型,void

3)返回值不可为“栈内存”的指针。

4)函数体尽量在80行代码之内;

5)尽量少用static变量

 

原创粉丝点击