#define用法:
1.简单的宏定义
#define MAX 10000
2.对函数进行定义 (不安全,存在隐患)
另外, #define pin (int*)
pin a,b;
此时a变量为int*类型, b变量为int类型, 这就违背了定义的初衷, 可以使用typedef来代替define使用
-> typedef int* pin;
3.define的多行定义
define可以替代多行的代码, 关键在每一行末尾需要加一个"\"符,(即每一个换行加"\")
4.条件编译的使用
在跨平台和系统的大规模开发中可使用#ifdef ... #endif进行条件编译, 同样可使用其进行逻辑判断
5.定义宏及取消宏
#define [MacroName] [MacroValue]
#undef [MacroName]
//普通宏
#define PI (3.1415926)
6.避免头文件的重复包含
#ifndef和#define组合, 一般用于头文件中,防止多个文件对同一个头文件的重复引用, 实际使用中即便未重复, 也可加上增加程序的可读性、移植性、健壮性等, 一般用法为:
#ifndef <</SPAN>标识>
#define <</SPAN>标识>
..... // include or define sth.
#endif
每个头文件的这个“标识”都应该是唯一的; 标识的命名规则一般是头文件名全大写,前后加下划线, 并把文件名中的"."也变成下划线, 例stdio.h对应如下:
#ifndef _STDIO_H_
#define _STDIO_H_
..... // include or define sth.
#endif
宏定义的缺点:
无法对宏定义的变量进行类型检查, 同时这也是define和const明显的区别之一.
简单介绍一下define和const的区别:
define定义的变量,系统在编译期间就全部将其替换, 不会对其进行类型及属性检查, 相对不安全; 但同时因为在编译期替换,所以其定义的变量不会在运行时分配内存, 不占用内存空间.
const定义的变量,如果类型不匹配, 系统在运行时会发现,提示或报错; 对应的const变量在运行时也是一种变量,系统会自动为其分配内存.
typedef与宏定义:
typedef用于在编程语言中将复杂的声明定义成简单的别名, 与宏定义有差异.
typedef本身是一种存储类的关键字,与auto、extern、static、register等关键字不能出现在同一表达式中
typedef相对于#define有个特别的长处: 它符合范围规则,用typedef定义的变量类型其作用范围限制在所定义的函数或者文件内(即其作用域取决于此变量定义的位置); 且typedef编译时被解释.