黑马程序员——C语言——宏定义、条件编译、文件包含等
来源:互联网 发布:周末c语言培训 编辑:程序博客网 时间:2024/06/11 02:20
——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-
一、预处理指令
1、所有的预处理指令都是以#开头
2、预处理指令分为三种
1)、宏定义
2)、条件编译
3)、文件包含
3、预处理指令在代码翻译成0和1之前,替换成值
4、预处理为止是随便写的
5、预处理指令的作用域:从编写指令的那一行开始,一直到文件结尾
6、宏名一般用大写或者以k开头,变量名一般用小写
#include<stdio.h> #define COUNT 5 //#define 宏名 值int main (){ char *name="COUNT";//出现在双引号中的COUNT不会换成5 int ages[COUNT]={1,2,67,89,90}; for(int i =0;i<COUNT;i++){ printf("%d\n",ages[i]) ; } #undf COUNT//从这行开始,COUNT这个宏失效 int a =COUNT; return 0;} /*1.带参数的宏定义效率比函数高 *//*int sum(int a,int b){ return a+b}*/#include<stdio.h>#define sum(v1,v2) ((v1)+(v2))#define pingfang(a) ((a)*(a))//宏定义纯粹的是文本替换 int main (){ //pingfang(5+5) (35) //pingfang(5+5)/pingfang(2) int c =pingfang(10)/pingfang(2); printf("c is %d\n",c); /*int c = sum(2,3) * sum (6,4);printf("c is %d\n",c);*//* int a=10; int b=20; int c=sum(a,b); printf("c is %d\n",c); //int c = sum (a,b) ;*/ return 0;}
二、条件编译
在很多情况下,我们希望程序的其中一部分代码只有在满族一定条件时才进行编译,否则不参与编译(只有参与编译的代码最终才能被执行),这就是条件编译.
基本用法
#if 条件1...Code 1...#elif 条件2...Code2...#else...Code3...#endif1>.如果条件1成立,那么编译器就会把#if与#elif之间的code1代码编译进去(注意:是编译进去,不是执行,很平时用的if-else是不一样的)2>.如果条件1不成立,条件2成立,那么编译器就会把#elif与#else之间的code2代码编译进去3>.如果条件1.2都不成立,那么编译器就会把#else与#endif之间的code3编译进去4>.注意,条件编译结束后,要么最后面加一个#endif,不然偶过很严重5>.#if与#elif后面的条件一般是判断宏定义而不是判断变量,因为条件编译是在编译之前做的判断,宏定义也是编译之前定义的,而变量是在运行时产生的.才有使用的意义#if #defined()和#if !Defined()的用法#if 和 #elif后面的条件不仅仅可以用来判断宏的值,还可以判断是否定义过某个宏。比如:1 #if defined(MAX)2 ...code...3 #endif如果前面已经定义过MAX这个宏,就将code编译进去。它不会管MAX的值是多少,只要定义过MAX,条件就成立。条件也可以取反:1 #if !defined(MAX)2 ...code...3 #endif如果前面没有定义过MAX这个宏,就将code编译进去。2.#ifdef和#ifndef的使用* #ifdef的使用和#if defined()的用法基本一致1 #ifdef MAX2 ...code...3 #endif如果前面已经定义过MAX这个宏,就将code编译进去。* #ifndef又和#if !defined()的用法基本一致1 #ifndef MAX2 ...code...3 #endif如果前面没有定义过MAX这个宏,就将code编译进去。文件包含指令/*1.<>表示系统自带的文件,""表示自定义的文件2.不允许循环包含,比如a.h包含b.h,b.h又包含a.h*/#define LISI_HInt sum (int a ,int b);#ifndef WANGWU_H#deffine WANGWU_HInt minus(int a,int b);#endif#include<stdio.h>Int main (){Int c = sum(10,19);Printf(“c is %d\n”, c);Return 0;}Typedef定义类型的关键字/*1.给已经存在的类型起一个新的名称2.使用场合: 1>.基本数据类型2>.指针3>结构体4>.枚举5>.指向函数的指针 */#include<stdio.h> typedef int MyInt;typedef MyInt MyInt2;//给指针类型char*起了一个新类型名称stringtypedef char* String;int main (){ String name = "jack"; printf("%s\n",name); return 0;} void test(){ int a; MyInt i = 10; MyInt2 c = 20; MyInt b1,b2; printf("")}/*外部函数:定义的函数能被本文件和其他文件访问,默认情况下所有函数都是外部函数1>.默认情况下所有函数都是外部函数2>.不允许有同名的外部函数 内部函数:定义的函数只能被本文件访问,其他文件不能访问1>.允许不同文件中有同名的内部函数 static对函数的作用:1>. 定义一个内部函数 2>. 声明内部函数 extern对函数的作用:1>.完整的定义一个外部函数2>.完整的声明一个外部函数(extern可以省略,默认情况下声明和定义的函数都是外部函数) */#include<stdio.h>//声明一个内部函数static void test2(); //完整地定义一个外部函数/*extern void test(){ printf("调用了test函数\n");} *///默认情况下,所有函数都是外部函数,所以可以省略extern extern void test(){ printf("调用了test函数\n");} //定义一个内部函数static void test2(){ printf("调用了test2函数\n"); test2();} //声明一个test函数//完整地声明一个外部函数//extern可以省略 //extern void test(); void test(); void test2();int main (){ test(); test2(); return 0; } /*全局变量共分两种: 外部变量: 定义的变量能被本文件和其他文件访问 1>.默认情况下,所有的全局变量都是外部变量 2>.不同文件中的同名外部变量, 都代表着统一变量 内部变量:定义的变量只能被本件访问,不能被其他文件访问 1>.不同文件中同名内部变量,互不影响 static 对变量的作用: 定义一个内部变量 extern对变量的作用: 声明一个外部变量 static对函数的作用: 声明和定义一个内部函数 extern对函数的作用: 用来定义和声明一个外部函数(可以省略) */#include<stdio.h>void test();//定义一个外部变量 int a;//定义一个内部变量static int b; //声明一个外部变量//extern int a; int main(){ b = 10; test(); printf("b的值是%d\n",b);/* a = 10; test(); printf("a的值是%d\n",a); */ return 0;} #include<stdio.h>//int a;void test(){ printf("a的值是%d\n",a);}static与局部变量#include<stdio.h> /*static修饰局部变量的使用场合:1.如果某个函数的调用频率特别高2.这个函数内部的某个变量值是固定不变的 */void test(){ static double pi =3.14; double zc =2 * pi * 10; int a = 0; a++; printf("a的值是%d\n",a);//1 /* static修饰局部变量: 1>.延长局部变量的声明周期:程序结束的时候,局部变量才会被销毁 2>.并没有改变局部变量的作用域 3>.所有的test函数都共享着一个变量b */ static int b = 0; b++; printf("b的值是%d\n",b);//1 }int main(){ test(); test(); test(); return 0;}/*设计一个函数,用来计算b的n次方 *//*递归的2个条件1.函数自己调用自己2.必须有个明确的返回值 */ #include<stdio.h>int pow2(int b,int n);int main(){ int c = pow2(2,10); printf("%d\n", c); return 0;}/*pow2(b, 0) == 1pow2(b, 1) == b ==pow2(b, 0) * bpow2(b, 2) == b*b == pow2(b, 1) * bpow2(b, 3) == b*b*b == pow2(b, 2) * b 1>.n为0,结果肯定是1 2>.n>0,pow2(b, n) == pow2(b, n-1) * b*/int pow2(int b,int n){ if (n <= 0) return 1; return pow2(b, n-1) * b;}int pow2(int b,int n){ //用来保存计算结果 int result = 1; /* result *= b; result *= b; result *= b; result *= b; result *= b; ... n次 */ for (int i = 0; i < n; i++) { result *= b; }}
0 0
- 黑马程序员——C语言——宏定义、条件编译、文件包含等
- 【黑马程序员】iOS学习之路——C语言之宏定义、条件编译和条件包含及typedef
- 预处理指令—宏定义,条件编译,文件包含
- 黑马程序员——ios基础---C语言:结构体、条件编译、文件操作
- 黑马程序员——预处理指令(条件编译、文件包含)
- 黑马程序员——c语言基础:宏和条件编译
- c语言预处理,包含(宏定义,包含,条件编译)
- 黑马程序员--IOS学习笔记总结 预处理指令(宏定义、条件编译、文件包含)
- 黑马程序员——C语言日志——条件编译指令
- 黑马程序员——c语言宏定义
- C——宏定义,条件编译
- IOS开发---C语言-㉑预处理指令:宏定义、条件编译、文件包含
- c语言三种预处理--宏定义,文件包含,条件编译
- C 预处理(宏定义,文件包含,条件编译)
- 黑马程序员--学习C语言条件编译
- C语言预处理指令:宏、条件编译、文件包含
- C08_C语言-宏、条件编译、文件包含
- C语言宏定义技巧——多次包含头文件内容不同
- 第五周项目2——对象作为数据成员
- API
- uva140 题解
- 第六周上机实践项目5——友元类
- ContentProvider内容图解
- 黑马程序员——C语言——宏定义、条件编译、文件包含等
- UILabel如何自适应高度(自动换行)
- [授权发表]Shell编程范例之布尔运算
- CSS3阴影 box-shadow的使用和技巧总结
- 第五周项目2 - 对象作为数据成员
- 【游戏服务器】游戏服务器中的日志处理方式之一
- 91:Decode Ways【DP】【字符串】
- Android系统开机启动native层C++应用程序
- 第三节 趣讲51单片机之P1P2P3口深入讲解