C学习笔记之预处理指令
2014-10-04 13:30
169 查看
一、什么是预处理指令
预处理指令是告诉编译器在编译之前预先处理的一些指令,有宏定义,文件包括,条件编译。
预处理指令一般以 # 号开头,能够出如今文件的不论什么地方,作用于整个文件。
二、宏定义
宏定义分不带參数的和带參数的宏定义。
1➢不带參数的宏定义
因为宏是在编译之前被替换,所以由此引起的语法错误仅仅有等到编译的时候才会对已经被替换在宏名作语法检查。
能够在定义一个宏时,引用已经定义的宏,如:
2➢带參数的宏定义
带參数的宏定义和看起来和函数有点相似 ,可是它们的本质的差别,宏定义仅仅是替换,不分配内存,没有參数的传送,更没有返回值。
#define SUM(a,b) a+b // 带參数的宏定义
这里的宏SUM带有參数,使用时会替换成这样:
三、文件包括
文件包括预编译指令我们都在用,#include<> #import 等等
它会将目标文件的内容拷贝一份到当前文件里,这非常easy,没有什么能够多说的。仅仅是要注意反复包括,循环包括造成的错误,反复定义错误或循环包括错误。
可是假设用到了条件编译就能避免反复包括引起的反复定义错误。
四、条件编译
这现个预处理指令表示假设SUM已经被定义就编译printf语句,与些相反的是
假设SUM没有被定义,就编译printf语句
与这两个同样作用的是
那么在文件包括时,使用条件编译就能够防止反复包括同一个文件。
预处理指令是告诉编译器在编译之前预先处理的一些指令,有宏定义,文件包括,条件编译。
预处理指令一般以 # 号开头,能够出如今文件的不论什么地方,作用于整个文件。
二、宏定义
宏定义分不带參数的和带參数的宏定义。
1➢不带參数的宏定义
#import <stdio.h> #define AGE 10 // 宏名用大写 int main() { int age = AGE; // AGE在编译之前会替换成 10 printf("%d", age); return 0; }在编译器编译之前,代码中的全部AGE会被替换成 10 ,当AGE的值要改动的时候仅仅须要在定义宏的地方改动一次,文件里的全部AGE都会被替换成新的值。
因为宏是在编译之前被替换,所以由此引起的语法错误仅仅有等到编译的时候才会对已经被替换在宏名作语法检查。
能够在定义一个宏时,引用已经定义的宏,如:
// // main.m // 预处理指令 // // Created by 葬花 桥 on 14-5-18. // Copyright (c) 2014年 itcast. All rights reserved. // #import <stdio.h> #define AGE 10 // 宏名用大写 #define AGE2 AGE+10 // 引用已经定义的宏 int main() { int age = AGE; // AGE在编译之前会替换成 10 int age2 = AGE2; printf("age1=%d\nage2=%d", age, age2); return 0; }
2➢带參数的宏定义
带參数的宏定义和看起来和函数有点相似 ,可是它们的本质的差别,宏定义仅仅是替换,不分配内存,没有參数的传送,更没有返回值。
#define SUM(a,b) a+b // 带參数的宏定义
这里的宏SUM带有參数,使用时会替换成这样:
三、文件包括
文件包括预编译指令我们都在用,#include<> #import 等等
它会将目标文件的内容拷贝一份到当前文件里,这非常easy,没有什么能够多说的。仅仅是要注意反复包括,循环包括造成的错误,反复定义错误或循环包括错误。
可是假设用到了条件编译就能避免反复包括引起的反复定义错误。
四、条件编译
#if defined(SUM) printf("SUM已经被定义!\n"); #endif
这现个预处理指令表示假设SUM已经被定义就编译printf语句,与些相反的是
#if !defined(SUM) printf("SUM没有被定义!\n"); #endif
假设SUM没有被定义,就编译printf语句
与这两个同样作用的是
#ifdef SUM // 与#if defined(SUM)同样 #endif #ifndef SUM // 与#if !defined(SUM)同样 #endif
那么在文件包括时,使用条件编译就能够防止反复包括同一个文件。
相关文章推荐
- 学习笔记之15-预处理指令1-宏定义
- C语言预处理指令学习笔记
- C#学习笔记:预处理指令
- 学习笔记之16-预处理指令2-条件编译
- 黑马程序员---C语言学习笔记之预处理指令、宏和条件编译
- 【C语言学习笔记】结构体、枚举、预处理指令
- 学习笔记之17-预处理指令3-文件包含
- 80X86学习笔记--数据传送指令
- 《鸟哥Linux私房菜》学习笔记_chap8_开机关机、在线求助与指令下达方式
- 王爽《汇编语言》(第二版) 学习笔记 (第九章 转移指令的原理 )
- 8086汇编学习笔记4-指令
- 王爽《汇编语言》(第二版) 学习笔记 (第五章 [BX]和loop指令 )
- 王爽《汇编语言》(第二版) 学习笔记 (第九章 转移指令的原理 )
- 80X86学习笔记--算术运算指令
- 80X86学习笔记--算术运算指令
- 预处理学习笔记
- 嵌入式linux c 学习笔记6-指令
- 预处理学习笔记
- ARM学习笔记(九)--指令基本格式
- ARM汇编指令学习笔记(一、二)【晚上BOOTLOAD了,速度】