编译预处理 -- 带参数的宏定义--【sky原创】

原文:编译预处理 -- 带参数的宏定义--【sky原创】

如有转载请注明出处

 

编译预处理  --  带参数的宏定义

前面为输出文件,后面为输入文件

gcc -E -o test.i test.c

gcc -o test  test.i

 

test.c

 

test.i

 

 

 

取消宏定义

#undef 宏名

 

条件编译的三种形式

 

 

第三种

#if 常量表达式

  源码1.....

#else // 此部分可选

  源码2...

#endif

 

#----表示ABC(a) 即为 a这个字符串

 

 

 

##的用法

 

A_B(print_, menu)

 

等价为  print_menu()

 

 

__DATE__ 进行预处理的日期,注意是两个下划线喔,(“Mmm dd yyyy”形式的字符串文字)

 

__FILE__ 代表当前源码文件名的字符串文字

__LINE__ 代表当前源代码中的行号的整数常量

__TIME__源码文件的编译时间,格式为: "hh: mm: ss"

__func__ 当前所在函数名

 

test.c

 

test.i

 

欢迎交流

新浪博客:http://blog.sina.com.cn/u/2049150530
csdn博客:http://blog.csdn.net/u011749143
博客园:http://www.cnblogs.com/sky-heaven/
知乎:http://www.zhihu.com/people/zhang-bing-hua

时间: 2024-10-30 00:11:55

编译预处理 -- 带参数的宏定义--【sky原创】的相关文章

编译预处理 -- 带参数的宏定义--【原创】

如有转载请注明出处   编译预处理  --  带参数的宏定义 前面为输出文件,后面为输入文件 gcc -E -o test.i test.c gcc -o test  test.i   test.c   test.i       取消宏定义 #undef 宏名   条件编译的三种形式     第三种 #if 常量表达式 源码1..... #else // 此部分可选 源码2... #endif   #----表示ABC(a) 即为 a这个字符串       ##的用法   A_B(print_,

C语言可变参数在宏定义中的应用

       在C语言的标准库中,printf.scanf.sscanf.sprintf.sscanf这些标准库的输入输出函数,参数都是可变的.在调试程序时,我们可能希望定义一个参数可变的输出函数来记录日志,那么用可变参数的宏是一个不错的选择. 在C99中规定宏也可以像函数一样带可变的参数,如: #define LOG(format, ...) fprintf(stdout, format, __VA_ARGS__) 其中,...表示可变参数列表,__VA_ARGS__在预处理中,会被实际的参数

编译-整形溢出问题,宏定义预算的范围?

问题描述 整形溢出问题,宏定义预算的范围? #define START 0x8000 #define END 0xFFFF #define LEN 0x8000 #if ( (START + LEN ) > END ) #error Buffer Overrun /* OK because START and LEN are unsigned long / #endif #if ( ( ( END – START ) – LEN ) < 0 ) #error Buffer Overrun /

C语言及程序设计进阶例程-8 预处理之宏定义

贺老师教学链接  C语言及程序设计进阶 本课讲解 宏定义 #include <stdio.h> #define PI 3.1415926 int main ( ) { float r,l,s,sq,vq; printf("please enter r:"); scanf("%f", &r); l=2 * PI *r; s=r * r * PI; sq=4* PI * r * r; -- } 带参数的宏定义 #include <stdio.h

C宏定义的小结

实现代码实例 程序代码: #include <stdio.h> #include <stdlib.h> #include <sys/types.h> /***** cplusplus *****/ #if 0 #include <iostream> using namespace std; #endif // 得到指定地址上的一个字节或字 #define MEM_B(x) (*((byte *)(x))) #define MEM_W(x) (*((word

OC中的宏 和 C中的预编译宏定义

1.先来几个常用的: [csharp] view plain copy // 是否高清屏   #define isRetina ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(640, 960), [[UIScreen mainScreen] currentMode].size) : NO)   // 是否模拟器   #define isSimulator (

标C编程笔记day04 预处理、宏定义、条件编译、makefile、结构体使用

预处理:也就是包含需要的头文件,用#include<标准头文件>或#include "自定义的头文件" 宏定义,如:#define PI 3.1415926 查看用宏定义的值替换宏名称,如:gcc -E test.c 带参数的宏:MAX(x,y) (x)>(y)?((x):(y))   //使用方法与函数一样 宏运算:     #define PRINT(n) printf(#n"=%d",n)   //#n 就是把传入的变量值作为字符串放在那里

宏定义中的##操作符和... and _ _VA_ARGS_ _

1.Preprocessor Glue: The ## Operator 预处理连接符:##操作符 Like the # operator, the ## operator can be used in the replacement section of a function-like macro.Additionally, it can be used in the replacement section of an object-like macro. The ## operator co

Objective-C 宏定义详细介绍_IOS

喜欢读一些开源项目源码的人,总是会发现,大神的代码中总是有那么一些简短而高效的宏定义,点击进去一看,发现晦涩难懂,别说学习了,有时候理解都是一种困难,但是宏定义本身并没有那么难,但是写出一个好的宏当然还是需要丰富的经验和技术,接下来就说一说宏定义,看懂大神的宏是第一步,偶尔写一个也是装逼的好办法- 定义: 宏定义分为两种:一种是对象宏(object-like macro)另一种就是函数宏(function-like macro) 根据名字也可以理解到,对象宏就是用来定义一个量,通过这个宏可以拿到