C语言与宏

原创 2015年11月19日 21:19:16

       宏定义又称为宏代换、宏替换,简称“宏”。

     一、不带参数的宏定义:

     格式: #define 标识符 字符串

     标识符常称为宏名。

     例:   #define PI 3.1415926   把程序中出现的PI全部换成3.1415926

     二、带参数的宏定义:

    格式:   #define 宏名(参数表) 字符串

    #define S(a,b) a*b

    area=S(3,2);第一步被换为area=a*b; ,第二步被换为area=3*2;

    类似于函数调用。

    三、使用宏的注意事项

   1、 宏名一般用大写

   2、使用宏可提高程序的通用性和易读性

   3、宏定义末尾不加分号

   4、 “#undef指令取消名字的宏定义,这样做可以保证后续的调用时函数调用”

    5、宏定义可以嵌套
    6、 字符串" "中不包含宏
    7、 宏定义不分配内存,变量定义分配内存。
     8、实参如果是表达式容易出问题

#define S(r) r*r

area=S(a+b);第一步换为area=r*r;,第二步被换为area=a+b*a+b;

正确的宏定义是#define S(r) ((r)*(r))
    9、宏名和参数的括号间不能有空格。
    10、宏替换只作替换,不做计算,不做表达式求解。
    11、函数调用在编译后程序运行时进行,并且分配内存。宏替换在编译前进行,不分配内存
     四、宏与函数的异同
     1、一般来说可以将宏看成一个简单的函数,只是宏不能进行入参类型检查。
      2、函数只有一个返回值,利用宏则可以设法得到多个值。
      3、宏展开使源程序变长,函数调用不会。
      4、宏展开不占运行时间,只占编译时间,函数调用占运行时间(分配内存、保留现场、值传递、返回值)。

相关文章推荐

黑马程序员———C语言———【枚举、typedef、宏、static和extern、文件操作】

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- ———————————————————————————————————————————————...

C语言OJ项目参考(2970)利用参数宏进行角度与弧度转换

2970: 利用参数宏进行角度与弧度转换Description 定义参数宏AngleToRadian(degree,minute,second),将度(degree)、分(minute)、秒(sec...

C语言中如何使用宏

C语言中如何使用宏转载C语言中如何使用宏C(和C++)中的宏(Macro)属于编译器预处理的范畴,属于编译期概念(而非运行期概念)。下面对常遇到的宏的使用问题做了简单总结。 关于#和## 在C语言...
  • llxxhm
  • llxxhm
  • 2011年01月04日 18:14
  • 289

C语言宏的高阶用法

关于#和##在C语言的宏中,#的功能是将其后面的宏参数进行字符串化操作(Stringfication),简单说就是在对它所引用的宏变量通过替换后在其左右各加上一个双引号。比如下面代码中的宏: #def...

C语言中程序调试和宏使用技巧

1)打印文件,函数和程序行         在linux使用GCC编译程序的时候,gcc在编译的过程中,会生成一些宏,可以使用这些宏分别打印当前源文件的信息。主要有当前文件(__FILE__,为...

关于标准C语言的预定义宏

标准C语言预处理要求定义某些对象宏,每个预定义宏的名称一两个下划线字符开头和结尾,这些预定义宏不能被取消定义(#undef)或由编程人员重新定义。下面预定义宏表,被我抄了下来。__LINE__ 当前...

程序猿之---C语言细节31(#define和#undef宏细节、#error、#pragma message("文本信息")、宏定义注释)

#define和#undef宏细节、#error、#pragma message("文本信息")、宏定义注释

C语言复习0.3——宏函数和静/动态库

C语言复习0.3

C语言预定义宏(__LINE__、__DATE__等)浅析

ANSIC标准定义了以下5种可供C语言使用的预定义宏:  __LINE__ 在源代码中插入当前源代码行号  __FILE__ 在源代码中插入当前源代码文件名  __DATE__ 在源代码中插入当...

C语言之详解#ifdef等宏及妙用

C语言之详解#ifdef等宏及妙用    这几个宏是为了进行条件编译。一般情况下,源程序中所有的行都参加编译。但是有时希望对其中一部分内容只在满足一定条件才进行编译,也就是对一部分...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C语言与宏
举报原因:
原因补充:

(最多只允许输入30个字)