预处理语句--#define、#error和#warning
1.#define语句
我们经常会这样定义一些宏: #define BLOCK 8192
但这样的宏却不能在字符串中展开,如: printf("The BLOCK number./n");
输出: The BLOCK number.
想要把宏处理成字符串,可以使用#号,如:#define MONCK(ARGTERM) printf("The term " #ARGTERM " is a string/n")
MONCK(A to B);
输出:
The term A to B is a string
可变参数的宏:可变参数可以用三个点(...)来表示,可以用__VA_ARGS__来展开,如:
#define err(...) fprintf(stderr,__VA_ARGS__)
err("%s %d/n","The error code: ",48);
一般,我们可以这样打印错误信息:
fprintf(stderr,"%s %d/n","The error code ",48);
但想要另外输出其它信息,我们可以这样定义一个可变参数的宏,例如:
#define errout(a,b,...) fprintf(stderr,"File %s Line %d/n",a,b); fprintf(stderr,__VA_ARGS__)
那么我们就可以这样使用这个宏:
errout(__FILE__,__LINE__,"Unexpected termination/n");
因为__VA_ARGS__在fprintf中的内部实现使用了逗号来作分割符,所以必须要求至少有一个参数,如果想使__VA_ARGS__为空,可以这样使用:
fprintf(stderr, ##__VA_ARGS__);
2.#error
当预处理器预处理到#error命令时将停止编译并输出用户自定义的错误消息。
注:上述语法成份中的方括号“[]”代表用户自定义的错误消息可以省略不写。
转载于:https://www.cnblogs.com/Caden-liu8888/p/5980349.html
预处理语句--#define、#error和#warning相关推荐
- 学习《面向对象程序设计——刘正林 著》—— #define 预处理语句出现的奇怪现象
在刘先生所著的<面向对象程序设计>中提到,由于#define预处理器没有较好的检查机制,使得在预处理语句中的宏定义会存在程序瑕疵,书中所举列子如下: #include <iostre ...
- FPGA设计心得(8)Verilog中的编译预处理语句
文章目录 写在前面 正文 宏定义 文件包含 条件编译 条件生成语句问题 回顾 参考资料 交个朋友 写在前面 相关博文 博客首页 注:学习交流使用! 正文 看稍微复杂一点的IP Core以及模块等 ,都 ...
- abs int 宏定义_在标准C中,预处理语句,特别是宏定义中,常常出现'#'和'##'符号,#字符串创建运算符#...
我看<U N I X环境高级编程>第七章时看到这么条宏定义: #define doit(name) pr_limits(#name, name) 这里第二个#号是什 ...
- php pdo 查询语句,PDO:预处理语句(参数化查询)
@(PDO(PHP data object/PHP数据对象))[PDO|预处理语句|参数化查询] The database library called PHP Data Objects or PDO ...
- #error和#warning使用分析
1 #error的用法 error用于生成一个编译错误消息. 用法:#error message(message不需要用双引号包围). #error编译指示字用于自定义程序员特有的编译错误消息,类似的 ...
- define不是c语言语句,define是语句
关于define 语句 #define最后加不加分号跟define本身没有关系,而取决于你使用的地方. 如: #define MY_VALUE 5; 如果这样用: int x =MY_VALUE: / ...
- from用法 prepare_MySQL 预处理语句prepare、execute、deallocate的使用
所以对于中文乱码,需要去check的地方有如下3个:1.mysql窗口的字符编码(xshell连接的远程工具的字符集设置): 2.数据库的字符编码(show variables like '%char ...
- MySQL 预处理语句prepare、execute、deallocate的使用,执行动态sql
MySQL官方将prepare.execute.deallocate统称为PREPARE STATEMENT. 我习惯称其为[预处理语句]. 其用法十分简单, PREPARE stmt_name FR ...
- mysql deallocate,MySQL中prepare与execute以及deallocate预处理语句的使用教程
这篇文章主要介绍了MySQL中预处理语句prepare.execute与deallocate的使用教程,需要的朋友可以参考下 MySQL官方将prepare.execute.deallocate统称为 ...
最新文章
- 报告解读 | 智能技术“核聚变”催生智能经济,将拉动十万亿市场
- android自定义WaveView水波纹控件
- 光流 | 基于光流法实现视觉里程计Visual Odometry(源代码)
- 放弃Venn-Upset-花瓣图,拥抱二分网络
- 【Opencv】之图片上叠加文字
- Ubuntu14.04安装mysql
- C++认识容器的迭代器
- mysql show status 过滤_给MySQL的show table status结果做过滤
- c# 指定打开某个路径下的CMD_Node.js 环境在 Windows 系统下安装与搭建教程
- 用PHP写距离圣诞节还有多久,距离圣诞节还有多少天
- CPU | 降低流水线停滞的策略
- matlab零阶保持器的作用,5.8 记忆模块、零阶保持器、一阶保持器
- 如何调用腾讯的IP库?
- 苹果Mac电脑怎么卸载软件?
- 微信小程序 修改radio样式
- 112、可燃液体的火灾危险性分类
- CAS使用账号密码实现单点登陆
- RTSP 流媒体播放地址
- 树莓派上使用python
- python对学历有要求嘛_学好python和photoshop好就业吗,对学历有什么要求吗??或者还需要学什么才能更好的就业。。...