`
bailingeye
  • 浏览: 21338 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

#define 用法

阅读更多

今天整理了一些#define的用法,与大家共享!
1.简单的define定义
#define MAXTIME 1000 
一个简单的MAXTIME就定义好了,它代表1000,如果在程序里面写
if(i<MAXTIME){.........}
编译器在处理这个代码之前会对MAXTIME进行处理替换为1000。
这样的定义看起来类似于普通的常量定义CONST,但也有着不同,因为define的定义更像是简单的文本替换,而不是作为一个量来使用,这个问题在下面反映的尤为突出。
2.define的“函数定义”
define可以像函数那样接受一些参数,如下
#define max(x,y) (x)>(y)?(x):(y);
这个定义就将返回两个数中较大的那个,看到了吗?因为这个“函数”没有类型检查,就好像一个函数模板似的,当然,它绝对没有模板那么安全 就是了。可以作为一个简单的模板来使用而已。
但是这样做的话存在隐患,例子如下:
#define Add(a,b) a+b;
在一般使用的时候是没有问题的,但是如果遇到如:c * Add(a,b) * d的时候就会出现问题,代数式的本意是a+b然后去和c,d相乘,但是因为使用了define(它只是一个简单的替换),所以式子实际上变成了
c*a + b*d
另外举一个例子:
#define pin (int*);
pin a,b;
本意是a和b都是int型指针,但是实际上变成int* a,b;
a是int型指针,而b是int型变量。
这是应该使用typedef来代替define,这样a和b就都是int型指针了。
所以我们在定义的时候,养成一个良好的习惯,建议所有的层次都要加括号。
3.宏的单行定义
#define A(x) T_##x
#define B(x) #@x
#define C(x) #x
我们假设:x=1,则有:
A(1)------〉T_1
B(1)------〉’1’
C(1)------〉\"1\"
(这里参考了 hustli的文章)
4.define的多行定义
define可以替代多行的代码,例如MFC中的宏定义(非常的经典,虽然让人看了恶心)
#define MACRO(arg1, arg2) do { \\
/* declarations */ \\
stmt1; \\
stmt2; \\
/* ... */ \\
} while(0) /* (no trailing ; ) */
关键是要在每一个换行的时候加上一个\"\\\" 
摘抄自http://www.blog.edu.cn/user1/16293/archives/2005/115370.shtml 修补了几个bug
5.在大规模的开发过程中,特别是跨平台和系统的软件里,define最重要的功能是条件编译。
就是:
#ifdef WINDOWS
......
......
#endif
#ifdef LINUX
......
......
#endif
可以在编译的时候通过#define设置编译环境
6.如何定义宏、取消宏
//定义宏
#define [MacroName] [MacroValue]
//取消宏
#undef [MacroName]
普通宏
#define PI (3.1415926)
带参数的宏
#define max(a,b) ((a)>(b)? (a),(b))
关键是十分容易产生错误,包括机器和人理解上的差异等等。
7.条件编译
#ifdef XXX…(#else) …#endif
例如 #ifdef DV22_AUX_INPUT
#define AUX_MODE 3 
#else
#define AUY_MODE 3
#endif
#ifndef XXX … (#else) … #endif [Page]
8.头文件(.h)可以被头文件或C文件包含;
重复包含(重复定义)
由于头文件包含可以嵌套,那么C文件就有可能包含多次同一个头文件,就可能出现重复定义的问题的。
通过条件编译开关来避免重复包含(重复定义)
例如
#ifndef __headerfileXXX__
#define __headerfileXXX__

文件内容

#endif

 

 

 

分享到:
评论

相关推荐

    C语言 #define用法集锦[修正版]

    #define用法集锦 1.简单的define定义 #define MAXTIME 1000 一个简单的MAXTIME 就定义好了,它代表1000,如果在程序里面写 if(i){.........} 编译器在处理这个代码之前会对MAXTIME 进行处理替换为1000。 这样的定义...

    【C/C++】#ifndef,#define用法

    主要是#ifndef和#define的用法说明,并举例说明便于理解。

    #define用法集锦.doc

    The #define Directive  You can use the #define directive to give a meaningful name to a constant in your program. The two forms of the syntax are:  Syntax  #define identifier token-stringopt  #...

    宏定义#define用法总结

    C语言中宏定义#define用法总结 1.简单的宏定义 2.带参数的宏 3.宏的特殊单行定义

    #define 问题 用法陷阱

    #define 问题 用法陷阱

    #ifndef #define #endif的用法

    #ifndef #define #endif的用法

    const #define inline

    const #define inline的用法及区别

    #indef 与#define 区别于用法

    #indef 与#define 区别于用法,很详细的解数哦!

    预编译#define_#ifdef_#endif用法

    最近在看Linux底层代码,发现好多代码里有#define #ifdef #endif,找了个介绍详细的文章,供大家参考!

    #define——用法大全

    详细介绍define用法 Definition[定义]: Usage[用法]: Instances[实例]:

    typedef和#define的用法与区别

    文章主要介绍了typedef和#define的用法与区别

    #define 宏定义的一些用法总结

    C、C++语言中的“#define” 宏定义的一些用法总结,很好的资料

    C#中#define后面只加一个参数的解释

    而define的用法不是后面加两个字符串吗,它这里却只加一个字符串,是什么意思? 还有很多头文件里都有如下语句 #if __STDC__ #define _Cdecl #else #define _Cdecl cdecl #endif __stdc__,cdecl代表什么? 比方说...

    C语言迷宫设计

    #define M2 12 //M2*N2为实际使用迷宫数组大小// #define N2 11 #define MAXLEN M2 //栈的长度// #define Null -100 #define True 1 #define False 0 int M=M2-2,N=N2-2; //M*N为迷宫的大小// typedef struct{ //...

    键盘扫描函数HD7279

    键盘扫描函数HD7279,#define HD7279_RESET 0xa4 //复位 #define HD7279_TEST 0xbf //测试 #define HD7279_RLC 0xa3 //循环左移 #define HD7279_RRC 0xa2 //循环右移 #define HD7279_RL 0xa1 //左移 #define HD7279_...

    浅谈#ifndef,#define,#endif的作用和用法

    用法: .h文件,如下: #ifndef XX_H #define XX_H … #endif 这样如果有两个地方都包含这个头文件,就不会出现两次包含的情况 。。 因为在第二次包含时 XX_H 已经有定义了,所以就不再 include了 ————————...

    #define宏定义——只替换,不计算! #define VS typedef

    #define的用法与#define和typedef的区别详解。 简单的define定义#define MAXTIME 1000,define的“函数定义”,宏的单行定义,define的多行定义,如何定义宏、取消宏,条件编译等等。

    详解C语言中的#define宏定义命令用法

    #define 命令#define定义了一个标识符及一个串。在源程序中每次遇到该标识符时,均以定义的串代换它。ANSI标准将标识符定义为宏名,将替换过程称为宏替换。...使用宏printf(“XYZ”);//该段不打印”this is a

    C# #define条件编译详解

    主要介绍了C# #define条件编译,告诉大家#define是用来做什么?如何使用#define,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    define用法完全集锦

    _define用法完全集锦/_define用法完全集锦/_define用法完全集锦

Global site tag (gtag.js) - Google Analytics