浅谈预处理标识符
来源:互联网 发布:手机淘宝 5.9.5旧版本 编辑:程序博客网 时间:2024/05/17 23:38
简单认识c标准指定的一些预定义宏:
__DATA__ 文件被编译的日期(例为:Oct 17 2016 形式的字符串文字)
__FILE__ 代表进行编译的源文件
__LINE__ 代表文件中__LINE__ 所在位置的当前行号
__TIME__ 源文件被编译的时间(例为:14:50:46 )
__STDC__ 如果编译器遵循ANSI C,其值为1,否则为0;
这些是预定义宏,直接可以拿来使用;对于以上几个预定义主要是用来输出当前被编译的源文件的信息;当多个文件进行编译时,可以用来输出简单的日志文件,在代码中出错的那一行打印这些预定义宏可以轻松的找出出错文件的信息;
宏中的#功能:在宏函数中使用,是将其后紧跟的宏参数进行字符串化的操作;在解释#功能之前先说一下printf函数中
邻近字符串连接特性,即printf("hello "" csdn");这个打印出来是一个字符串,和printf("hello csdn");的效果是一模一样的;此处要注意的是printf("");引号中的内容被看做普通文本,在宏函数中若宏参数在引号内包含,是不会被替换;例如:
#define PRINT(FORMAT )\printf("this value of FORMAT is %d\n",FORMAT)int main(){PRINT(6);//system("pause");return 0;}
输出为:this value of FORMAT is 5;
而对于:
#define PRINT(FORMAT )\printf("this value of "# FORMAT"is %d\n",FORMAT)int main(){PRINT(5);system("pause");return 0;}
在预处理时需要进行宏替换,识别到PRINT是一个宏,然后对宏参数进行替换,先将#FORMAT替换为#5,#进行字符化操作后:"5",后面的FORMAT也被替换为5.替换后为:printf(" this value of " "5" " is \%dn",5 );输出为this value of 5 is 5;
宏中##的功能:它把位于它两边的符号连接成一个符号
看例子:
#define INOS(STR1,STR2) STR1##STR2#define STR1 printf("str1");#define STR2 printf("str2");#define STR1STR2 printf("str1str2");int main(){INOS(STR1,STR2);system("pause");return 0;}
最终的输出结果为:str1str2;
INOS的作用就是将##左边的STR1和右边的STR2粘合为STR1STR2;最终是STR1STR2进行宏替换;
- 浅谈预处理标识符
- 预处理标识符
- 预处理标识符
- 预处理标识符#与##
- 预处理相关标识符
- c 语言 预处理标识符
- 熟悉预处理标识符。
- 预处理标识符简单介绍
- C语言--预处理标识符
- 预处理标识符: __LINE__ __FILE__ __DATE__ __TIME__ ##
- 【C语言】熟悉预处理标识符和宏
- 浅谈c语言预处理知识
- POJ3093 浅谈背包DP预处理
- 胡博君浅谈Java标识符的命名规则
- Python实例浅谈之一标识符检查
- 【C语言】了解一些常用的预处理标识符
- 熟悉以下预处理标识符__LINE__ __FILE__ __DATE__ __TIME__ # ##
- 【C语言】了解编译过程、熟悉预处理的标识符
- Java并发编程之十:多线程环境中安全使用集合API(含代码)
- android:使用DialogFragment 创建对话框
- ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'mysql'
- 机器学习算法
- 关于计算机教育领域的会议排名整理备忘
- 浅谈预处理标识符
- 用array_slice实现分页
- cocos2dx长连接BSDSocke网络通信
- cocos2d-x 3.x学习之滑动条控制背景音乐音量
- Java并发编程之十一:死锁(含代码)
- 事件冒泡与禁用
- HTML5中本地存储与本地数据库
- Android画图最基本的三个对象(Color,Paint,Canvas)
- LeetCode 67 - Add Binary