C语言之#define 函数

转自: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
 * =====================================================================================
 */
        int
main ( 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
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
众所周知,人工智能是当前最热门的话题之一, 计算机技术与互联网技术的快速发展更是将对人工智能的研究推向一个新的高潮。 人工智能是研究模拟和扩展人类智能的理论与方法及其应用的一门新兴技术科学。 作为人工智能核心研究领域之一的机器学习, 其研究动机是为了使计算机系统具有人的学习能力以实现人工智能。 那么, 什么是机器学习呢? 机器学习 (Machine Learning) 是对研究问题进行模型假设,利用计算机从训练数据中学习得到模型参数,并最终对数据进行预测和分析的一门学科。 机器学习的用途 机器学习是一种通用的数据处理技术,其包含了大量的学习算法。不同的学习算法在不同的行业及应用中能够表现出不同的性能和优势。目前,机器学习已成功地应用于下列领域: 互联网领域----语音识别、搜索引擎、语言翻译、垃圾邮件过滤、自然语言处理等 生物领域----基因序列分析、DNA 序列预测、蛋白质结构预测等 自动化领域----人脸识别、无人驾驶技术、图像处理、信号处理等 金融领域----证券市场分析、信用卡欺诈检测等 医学领域----疾病鉴别/诊断、流行病爆发预测等 刑侦领域----潜在犯罪识别与预测、模拟人工智能侦探等 新闻领域----新闻推荐系统等 游戏领域----游戏战略规划等 从上述所列举的应用可知,机器学习正在成为各行各业都会经常使用到的分析工具,尤其是在各领域数据量爆炸的今天,各行业都希望通过数据处理与分析手段,得到数据中有价值的信息,以便明确客户的需求和指引企业的发展。
众所周知,人工智能是当前最热门的话题之一, 计算机技术与互联网技术的快速发展更是将对人工智能的研究推向一个新的高潮。 人工智能是研究模拟和扩展人类智能的理论与方法及其应用的一门新兴技术科学。 作为人工智能核心研究领域之一的机器学习, 其研究动机是为了使计算机系统具有人的学习能力以实现人工智能。 那么, 什么是机器学习呢? 机器学习 (Machine Learning) 是对研究问题进行模型假设,利用计算机从训练数据中学习得到模型参数,并最终对数据进行预测和分析的一门学科。 机器学习的用途 机器学习是一种通用的数据处理技术,其包含了大量的学习算法。不同的学习算法在不同的行业及应用中能够表现出不同的性能和优势。目前,机器学习已成功地应用于下列领域: 互联网领域----语音识别、搜索引擎、语言翻译、垃圾邮件过滤、自然语言处理等 生物领域----基因序列分析、DNA 序列预测、蛋白质结构预测等 自动化领域----人脸识别、无人驾驶技术、图像处理、信号处理等 金融领域----证券市场分析、信用卡欺诈检测等 医学领域----疾病鉴别/诊断、流行病爆发预测等 刑侦领域----潜在犯罪识别与预测、模拟人工智能侦探等 新闻领域----新闻推荐系统等 游戏领域----游戏战略规划等 从上述所列举的应用可知,机器学习正在成为各行各业都会经常使用到的分析工具,尤其是在各领域数据量爆炸的今天,各行业都希望通过数据处理与分析手段,得到数据中有价值的信息,以便明确客户的需求和指引企业的发展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值