#define / #undef /#progma 预处理器
来源:互联网 发布:电脑淘宝达人淘在哪里 编辑:程序博客网 时间:2024/06/11 17:20
预处理,在程序编译之前先进行处理,
#define reg register
#define do_forever for( ; ; )//实现无限循环的语句
#define CASE break;case //会在每个case之前放一个break
#define malloc //将语句注释空,可以有效控制程序随意引用
#undef malloc //取消定义恢复原本状态
当定义中的stuff 很长,可以分成几行,除了最后一行之外,其余每一行都要加入一个反斜杠 \ ,如下面的例子
#define DEBUG_PRINT printf( "File %s line %d:" \
"x = %d, y = %d, z = %d", \
__FILE__,__LINE__, \
x ,y ,z )
预定义的符号
符号样例值含义__FILE__"name.c"进行编译的源文件名 //在确认调试输出的来源很有用处__LINE__25文件当前行的行号 //在确认调试输出的来源很有用处__DATE__"Jan 31 1995 "文件被编译的日期__TIME__"18 : 04:30 "文件被编译的时间__STDC__1如果遵循ANSIC,其值就是1,否则为定义在define的语句之后不能加“;” 系统在编译的时候会自动加上去
假设你需要这样的宏定义
#define SQUARE(x) ((X) * (X))
这样就可有效的避免很多问题
使用技巧
#define PRINT( FORMAT , VALUE) \
printf( "The value of " #VALUE \
" is " FORMAT "\n" ,VALUE)
PRINT( "%d" ,x+3);
the value of x+3 is 25
## 会把两边的符号连成一个符号,前提是产生的符号必须是合法的
#define ADD_TO_SUM( sum_number , value ) \
sum ## sum_number +=25
ADD_TO_SUM(5,25);
结果 sum5 = 25.
宏常用语频繁地执行简单的计算
比如比较大小
#define MAX( a, b ) ((a) > (b) ? (a) : (b) )
#undef
用于移除去一个宏定义,如果现存的名字需要被重新定义,旧定义必须先用#undef移除
条件编译
#if DEBUG
printf(`````);
#endif
DEBUG 为 1,编译内容,为0则删除内容语句
#if
#elif
#else
#endif
#elif 只有前面都是假才能被编译
#else 只有前面都是假才会编译
#if defined( symbol )
#ifdef symbol
#if !defined( symbol )
#ifndef symbol
每队语句之间都是等价的,但是#if的功能更强一点,都是说假如定义了symbol 才会怎么样
#if X>0 || defined( ABC ) &&defined (BCD)
嵌套指令
#if defined(OS_UNIX) //#ifdef 也可以代替
#ifdef OPTION1
unix_version_of_option1();
#endif
#ifdef OPTION2
unix_version_of_option2();
#endif
#elif defined(OS_MSDOS)
#ifdef ----
unix_version_of_option2();
#endif
#endif
相比把程序所需的所有声明放入一个巨大头文件,还不如每个头文件包含用于某个特定函数或模块的声明的做法更好一些
为了避免重复定义统一头文件
#ifndef _HEADERNAME_H
#define _HEADERNAME_H 1 //#define _HEADERNAME_H 也行
#error text of error message
#if defined ()
stuff ```
#elif defined()
stuff ''
#elif defined()
````
#else
#error No`````````````
#endif
用error 产生错误信息
#line number “string”//通知预处理器下一行输入的是行号
#progma 用于支持因编译器而异的特性
在所有的预处理指令中,#Pragma 指令可能是最复杂的了,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作。#pragma指令对每个编译器给出了一个方法,在保持与C和C++语言完全兼容的情况下,给出主机或操作系统专有的特征
0 0
- #define / #undef /#progma 预处理器
- #define #undef
- C++之#progma pack预处理
- C++之#progma pack预处理
- macro definitions (#define, #undef)
- Preprocessor directives #define, #undef
- #define和#undef
- #define与#undef
- 预处理器(#define)
- #ifndef/#define/#endif与#undef
- 预处理器指令 #include 、 #define
- 预处理#define
- #define 与 #undef 指令配套使用
- C语言中的宏undef & define
- #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE
- #define #undef #ifdef #ifndef #if用法
- C#控制台基础 #define #undef的实例
- 预处理器#ifndef,#define,#endif 的用法
- javaweb
- UVA 11400 Lighting System Design DP
- android中WebView回调java的方法
- LDA在资讯推荐的应用
- Garbage Collection | 引用计数的改善考察(二)
- #define / #undef /#progma 预处理器
- 接口验证 每个IP每小时只能登陆2次
- 输入华氏度输出摄氏度和开尔文温度
- RESTful WebService入门
- Anroid中强指针和弱智针介绍
- 动画基础归纳学习
- 钱财乃身外之物,身体最重要
- ExtJs xtype 速查表
- js的onclick字符串参数的解决办法