C语言之#define 函数

来源:互联网 发布:最新安卓java模拟器 编辑:程序博客网 时间:2024/06/05 07:31

转自:http://blog.sina.com.cn/s/blog_5caa94a00100cnua.html



C语言之#define 函数


可以是用#define 替换函数语句;


#define GG(a, b, c, d, x, s, ac) { \
(a) += G((b), (c), (d)) + (x) + (UINT4)(ac); \
(a) = ROTATE_LEFT((a), (s)); \
(a) += (b); \
}

 

\ 表示强制换行,而换行后的内容与前一行的内容编译器仍把它看作是同一行.
编译器识别define的时候不是以分号结尾的,是以回车作为结束的。
#define后面定义的内容比须在同一行,而有时是为了让程序便于阅读,从中间进行换行,如果没有符号'\',则我们的换行表示#define的结束,这也是为什么你去掉后会报错的原因.如果在这里加了'\',也可以说是对"回车"的转义,表示这里有一个回车字符而已,#define并没有结束.而程序编译的时候,编译器会忽略掉这些'\回车'的字符.

讲得不好,表达能力不强呵呵,但仍希望你能了解.如果你会用LINUX系统的话,你用命令行中输入 ls \回车,系统也不会执行ls这个命令.它会认为你命令仍没有输完,会继续等待用户的输入.

 

 


define int 定义函数
int fun(int a,int b)

{

 return (a+b)*(a-b);
}

void main(){

  intd,x,y;

  printf("inputx,y:");

  scanf("%d%d",&x,&y);

  d=fun(x,y);

  printf("x*x-y*y=%d\n",d);
}

若写成define也可以 但保险一点的话应该写成
define fun(a,b) ((a)+(b))*((a)-(b))防止a,b是表达式形式

=========================================================

在学链表时,
书上定义
struct List{
     int size;
     ......
};
struct List *list;

本该可以用   
  list->size 
来读取信息;

为何书上还用 
  #define list_size(list)      ((list)->size)
那么麻烦呢?

优点:可完成函数调用的功能,又能减少系统开销,提高运行效率。因为它是在预处理阶段即进行了宏展开,在执行时不需要转换,即在当地执行。

           宏  代码在预处理期被简单替换, 类似于C++的内联函数
           普通函数 多了申请栈,压栈,出栈,释放栈

比函数调用效率高,省去了参数的拷贝,直接替换。




缺点:所占用的目标代码空间相对较大

目标代码空间变大,不利于调试,还可能会导致隐含的错误

编译选项加/EP /P,重新编译,查看宏展开后对应的.i文件。


==========================================================

define 函数定义注意

代码

复制代码
#include        <errno.h>#include        <math.h>#include        <stdio.h>#include        <stdlib.h>#include        <string.h>#define ADD(x, y) x + y#define MUL(x, y) x * y/* * ===  FUNCTION  ====================================================================== *         Name:  main *  Description:  main function * ===================================================================================== */        intmain ( int argc, char *argv[] ){   int a= 2, b = 3;   printf ("\nProgram %d\n\n", MUL(ADD(a, b), 5) );  //被转换成2 + 3 * 5 注意 没有括号 故结果为17   return EXIT_SUCCESS;}               /* ----------  end of function main  ---------- */
复制代码

 

output:

 program 17



0 0
原创粉丝点击