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 [用户自定义的错误消息]

当预处理器预处理到#error命令时将停止编译并输出用户自定义的错误消息。

注:上述语法成份中的方括号“[]”代表用户自定义的错误消息可以省略不写。

举例1:
#error Sorry,an error has occurred!
举例2:
#error

转载于:https://www.cnblogs.com/Caden-liu8888/p/5980349.html

预处理语句--#define、#error和#warning相关推荐

  1. 学习《面向对象程序设计——刘正林 著》—— #define 预处理语句出现的奇怪现象

    在刘先生所著的<面向对象程序设计>中提到,由于#define预处理器没有较好的检查机制,使得在预处理语句中的宏定义会存在程序瑕疵,书中所举列子如下: #include <iostre ...

  2. FPGA设计心得(8)Verilog中的编译预处理语句

    文章目录 写在前面 正文 宏定义 文件包含 条件编译 条件生成语句问题 回顾 参考资料 交个朋友 写在前面 相关博文 博客首页 注:学习交流使用! 正文 看稍微复杂一点的IP Core以及模块等 ,都 ...

  3. abs int 宏定义_在标准C中,预处理语句,特别是宏定义中,常常出现'#'和'##'符号,#字符串创建运算符#...

    我看<U   N   I   X环境高级编程>第七章时看到这么条宏定义: #define   doit(name)   pr_limits(#name,   name) 这里第二个#号是什 ...

  4. php pdo 查询语句,PDO:预处理语句(参数化查询)

    @(PDO(PHP data object/PHP数据对象))[PDO|预处理语句|参数化查询] The database library called PHP Data Objects or PDO ...

  5. #error和#warning使用分析

    1 #error的用法 error用于生成一个编译错误消息. 用法:#error message(message不需要用双引号包围). #error编译指示字用于自定义程序员特有的编译错误消息,类似的 ...

  6. define不是c语言语句,define是语句

    关于define 语句 #define最后加不加分号跟define本身没有关系,而取决于你使用的地方. 如: #define MY_VALUE 5; 如果这样用: int x =MY_VALUE: / ...

  7. from用法 prepare_MySQL 预处理语句prepare、execute、deallocate的使用

    所以对于中文乱码,需要去check的地方有如下3个:1.mysql窗口的字符编码(xshell连接的远程工具的字符集设置): 2.数据库的字符编码(show variables like '%char ...

  8. MySQL 预处理语句prepare、execute、deallocate的使用,执行动态sql

    MySQL官方将prepare.execute.deallocate统称为PREPARE STATEMENT. 我习惯称其为[预处理语句]. 其用法十分简单, PREPARE stmt_name FR ...

  9. mysql deallocate,MySQL中prepare与execute以及deallocate预处理语句的使用教程

    这篇文章主要介绍了MySQL中预处理语句prepare.execute与deallocate的使用教程,需要的朋友可以参考下 MySQL官方将prepare.execute.deallocate统称为 ...

最新文章

  1. 报告解读 | 智能技术“核聚变”催生智能经济,将拉动十万亿市场
  2. android自定义WaveView水波纹控件
  3. 光流 | 基于光流法实现视觉里程计Visual Odometry(源代码)
  4. 放弃Venn-Upset-花瓣图,拥抱二分网络
  5. 【Opencv】之图片上叠加文字
  6. Ubuntu14.04安装mysql
  7. C++认识容器的迭代器
  8. mysql show status 过滤_给MySQL的show table status结果做过滤
  9. c# 指定打开某个路径下的CMD_Node.js 环境在 Windows 系统下安装与搭建教程
  10. 用PHP写距离圣诞节还有多久,距离圣诞节还有多少天
  11. CPU | 降低流水线停滞的策略
  12. matlab零阶保持器的作用,5.8 记忆模块、零阶保持器、一阶保持器
  13. 如何调用腾讯的IP库?
  14. 苹果Mac电脑怎么卸载软件?
  15. 微信小程序 修改radio样式
  16. 112、可燃液体的火灾危险性分类
  17. CAS使用账号密码实现单点登陆
  18. RTSP 流媒体播放地址
  19. 树莓派上使用python
  20. python对学历有要求嘛_学好python和photoshop好就业吗,对学历有什么要求吗??或者还需要学什么才能更好的就业。。...

热门文章

  1. Jmeter查看log日志
  2. IDEA离线使用本地maven仓库
  3. 【NOIP2001】【Luogu1027】Car的旅行路线
  4. 【编辑器】Vim学习笔记
  5. 语言中根号打法_知识的诅咒,数学老师在教学中不得不防的陷阱
  6. python博客主题_博客园SimpleMemary主题美化教程
  7. npm设置仓库register
  8. echart高级使用_echarts高级入坑
  9. 网络地址转换协议NAT详解
  10. UnityGI3:光照探针