黑马程序员-C学习笔记-编译预处理指令

------- ios培训、 android培训、java培训、期待与您交流! ----------

一.编译预处理指令

源代码 -> 编译预处理 -> 编译 -> 链接 -> 运行

编译预处理指令:在编译前进行解析处理的指令

特点:所有编译预处理指令都以#开头

所有编译预处理指令都不加分号

二.宏定义

1.不带参数的宏定义:  #define 宏名 值

(1)在预编译的时候所出现宏名标识的地方都会被替换成宏名后面的值

注意点:注释中的宏名不会被替换

在字符串中出现的宏名不会被替换

(2)宏名的命名规范: 全部大写,有多个单词使用下划线隔开

2.带参数的宏定义: #define 宏名(参数列表)表达式

(1)参数列表中的参数代入表达式中,然后替换出现宏名的地方

注意点:参数列表中没有数据类型

宏名与括号之间一定不要加空格

(2)带参数的宏定义与函数的区别:

函数有调用过程,会开辟存储空间,花销比较大

宏仅仅是一个替换的操作

(3)取消定义某个宏 #undef

自己的理解:

1.做题的时候,要记住宏仅仅是一个替换操作

2.自己定义宏的时候,所有出现参数以及运算结果的地方都加上括号

3.不要在参数中使用自增自减和复合赋值运算符

三.条件编译:在编译的时候,条件满足就编译某段代码

1.格式: #if开头 #elif  #else  #endif结尾

特点:(1)条件编译中的条件只能由宏定义和常量组成,不能出现变量

(2)在编译的时候进行判断

使用场景:

1. #indef 宏名

//如果定义了某个宏就执行这里的语句

#endif

2. #ifndef

//如果没有定义某个宏就执行这里的语句

#endif

四.static与extern

1.对局部变量的作用

static:(1)延长变量的生命周期:从第一次执行开始直到文件退出

(2)定义的这一行代码仅仅执行一次

(3)不会改变变量的作用域

extern:放在函数内部,仅仅是对全局变量的声明

2.对全局变量的作用

内部变量:仅能在本文件中访问的变量

外部变量:可以再所有文件中被访问的变量

static:声明或定义一个内部变量

extern:声明或定义一个外部变量

3.对函数的作用

内部函数:仅能在本文件中使用的函数

外部函数:可以在其他文件使用的函数,默认所有函数都是外部函数

static:声明或定义一个内部函数

extern:完整声明或定义一个外部函数

时间: 2024-10-31 03:06:56

黑马程序员-C学习笔记-编译预处理指令的相关文章

黑马程序员-C学习笔记之预处理指令

---------------------- IOS开发.Android培训.期待与您交流! ---------------------- 一.什么是预处理指令 预处理指令是告诉编译器在编译之前预先处理的一些指令,有宏定义,文件包含,条件编译. 预处理指令一般以 # 号开头,可以出现在文件的任何地方,作用于整个文件. 二.宏定义 宏定义分不带参数的和带参数的宏定义.     1?不带参数的宏定义 #import <stdio.h> #define AGE 10 // 宏名用大写 int ma

黑马程序员_OC学习笔记之Foundation框架集合类

OC--集合类 1.OC集合类包括NSArray,NSSet,NSDictionary都是以面向对象的方式操作数组,而且OC数组不像C语言中的数组只能存放同一种数据类型,它可以存放任意类型的对象,但是不能存放非OC对象类型如基本数据类型int,struct,enum等 2.OC数组是以对象的方式存在,因此在创建的时候需要为创建的对象前面加* 3.NSArray数组一旦创建就决定了是不是可变,而且永远是可变或不可变 4.NSArray数组和子类NSMutableArray的基本操作: 1>使用NS

黑马程序员_OC学习笔记之description方法和sel

OC--description方法 1.Description方法包括类方法和对象方法.(NSObject类所包含) -description(对象方法) 2.使用NSLog和@%输出某个对象时,会调用对象的description方法,并拿到返回值进行输出. +description(类方法) 3.使用NSLog和@%输出某个对象时,会调用类对象的description方法,并拿到返回值进行输出,把整个对象一次性打印出来,打印对象使用%@. 4.使用@%打印对象如(“@%”,P)默认打印输出为<

黑马程序员_OC学习笔记之@property和@synthesize

[objc] view plaincopyprint? <span style="font-size:24px;">#import <Foundation/Foundation.h> @interface Person : NSObject { int _age; int age; int _height; int height; int _weight; int weight; int _money; int money; } @property int ag

黑马程序员——Foundation学习笔记(NSSet和NSMutableSet)

==========android培训.ios培训.java培训.期待与您交流========== 一.NSSet: NSSet NSSet里面存储的元素没有顺序,NSArray中的元素有顺序. NSSet *s = [NSSet set]; // 创建一个空的Set,永远是空,不可变. NSSet *s2 = [NSSet setWithObjects:@"jack",@"rose",nil]; NSString *str = [s2 anyObject]; //

黑马程序员-OC学习笔记之Foundation框架NSNumber、NSValue和NSDate

---------------------- IOS开发.Android培训.期待与您交流! ---------------------- 一.NSNumber 前几篇笔记中,小桥复习了Foundatio框架中的几个类,这三个是OC学习的尾声了. 小桥已经复习过OC数组类NSArray,也说过它只能存放OC的对象,对于基本的数据类型确无能为力,但是实际编程中经常要把基本的数据如int.float,结构体存放的OC数组中,怎么办?这里的NSNumber就有用了,它能够把基本数据类型包装成OC对象.

黑马程序员-OC学习笔记之block

过山车 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 9426    Accepted Submission(s): 4151 Problem Description RPG girls今天和大家一起去游乐场玩,终于可以坐上梦寐以求的过山车了.可是,过山车的每一排只有两个座位,而且还有条不成文的规矩,就是每个女生必须找个个男生做par

黑马程序员-OC学习笔记之ARC

---------------------- IOS开发.Android培训.期待与您交流! ----------------------一.什么是ARC        ARC是自动引用计数,苹果官方在Xcode4.2及以后版本中加入的一个内存管理机制,完全取代了程序员人工的内存管理,使得程序员只须关心程序本身.使用ARC,编译器会自动在代码中加入内存管理代码,是一个编译器特性,而不是运行时特性,当然,它也和JAVA的垃圾回收不同,它的本质和手动的内存管理是一样的,只是这些代码编译器会自动添加.

黑马程序员-C学习笔记之scanf

---------------------- IOS开发.Android培训.期待与您交流! ---------------------- 一.scanf函数介绍 这也是在stdio.h中声明的一个函数,因此使用前必须加入#include<stdio.h>.调用scanf函数时,需要传入变量的地址作为参数,scanf函数会等待标准输入设备(比如键盘)输入数据,并且将输入的数据赋值给地址对应的变量. 函数原型为:int scanf(const char*format,...); 二.scanf用