与函数的区别
从整个使用过程可以发现,带参数的宏定义,在源程序中出现的形式与函数很像。但是两者是有本质区别的:

1>宏定义不涉及存储空间的分配、参数类型匹配、参数传递、返回值问题
2>函数调用在程序运行时执行,而宏替换只在编译预处理阶段进行。所以带参数的宏比函数具有更高的执行效率
预处理指令:条件编译
程序的其中一部分代码只有在满足一定条件时才进行编译,
否则不参与编译(只有参与编译的代码最终才能被执行),这就是条件编译
一般用法:
#if 条件1
…code1…
#elif 条件2
…code2…
#else
…code3…
#endif//条件编译结束标记
#if和#elif后面的条件一般是判断宏定义而不是判断变量,因为条件编译是在编译之前做的判断,
宏定义也是编译之前定义的,而变量是在运行时才产生的、才有使用的意义
#define MAX 11
int main ()
{
#if MAX == 0
printf(“MAX是0”);
#elif MAX > 0
printf(“MAX大于0”);
#else
printf(“MAX小于0”);
#endif
return 0;
}
是否定义过宏:
#ifdefined(MAX)//#ifdef的使用和#ifdefined()的用法基本一致
…code…
#elif!defined(MAX)//#ifndef又和#if!defined()的用法基本一致
#endif
预处理指令:文件包含
1.第1种形式#include<文件名>
直接到C语言库函数头文件所在的目录中寻找文件
2.第2种形式#include“文件名”
系统会先在源程序当前目录下寻找,若找不到,再到操作系统的path路径中查找,最后才到C语言库函数头文件所在目录中查找
注意:#include指令允许嵌套包含,比如a.h包含b.h,b.h包含c.h,但是不允许递归包含,比如a.h包含b.h,b.h包含a.h
使用#include指令可能导致多次包含同一个头文件,降低编译效率
解决方法:在包含的文件里,加上条件编译指令,防止函数被重复定义
如:
#ifndef c_program_cc_h//如果没有定义该宏,那就定义一个,然后预编译函数1,2; 如果定义了则不执行编译跳到了#endif
#define c_program_cc_h
method 1();
method 2();
………….
#endif
局部变量
1>定义:在函数内部定义的变量,称为局部变量。形式参数也属于局部变量。
2>作用域:局部变量只在定义它的函数内部有效,即局部变量只有在定义它的函数内部使用,其它函数不能使用它。
全局变量
1>定义:在所有函数外部定义的变量,称为全局变量。
2>作用域:全局变量的作用范围是从定义变量的位置开始到源程序结束,即全局变量可以被在其定义位置之后的其它函数所共享。
变量的存储类型
C语言根据变量的存储类型(变量存储的位置:1. 运行时堆栈 2.普通内存 3.寄存器)的不同,
可以把变量分为:自动变量、静态变量、寄存器变量
> 哪些是自动变量:被关键字auto修饰的局部变量都是自动变量,但是极少使用这个关键字,
基本上是废的,因为所有的局部变量在默认情况下都是自动变量。存在堆栈
> 哪些是静态变量:存在内存,程序结束才销毁
所有的全局变量都是静态变量
被关键字static修饰的局部变量也是静态变量
> 哪些变量是寄存器变量:
被关键字register修饰的自动变量都是寄存器变量
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-55787-8.html
你脸红了吗
最先进的濒海战斗舰不就驻扎在新加坡么~