#宏定义

来源:互联网 发布:大乐透后区杀号计算法 编辑:程序博客网 时间:2024/06/08 04:40

#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编译时被解释.