8种机械键盘轴体对比

本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?

使用过word软件可能知道里面有个功能就是宏录制,可以录制一系列的操作,然后在之后的工作中,快速插入一组操作,减少重复性的工作,提高了效率。编程中的宏,和这个道理一样,也是宏替换。下面先看下C语言中常见的宏命令。

C语言程序的编译过程,简单可分为预处理、编译、中间代码.o文件、链接、目标代码。预处理阶段,通过各种编译器的预处理器(Preprocessor),将.c文件中的宏替换,条件编译指令,头文件包含,特殊符号,以及typedef类型定义。

其中预处理器工作有:文件包含:可以把源程序中的#include 扩展为文件正文,即把包含的.h文件找到并展开到#include 所在处。

条件编译:预处理器根据#if和#ifdef等编译命令及其后的条件,将源程序中的某部分包含进来或排除在外。

宏展开:预处理器将源程序文件中出现的对宏的引用展开成相应的宏定义。

预处理中宏的作用:方便程序的修正:将某个特定数量在程序中出现的所有实例统统加以修改。

提高程序的运行效率:C语言在实现函数调用时会带来重大系统开销,宏可以实现一种这样的程序块:它看上去像函数,但却没有函数调用的开销。

#include :引入头文件,也就是替换头文件的内容到此处。

#define : 定义一个宏不带参数的宏定义:#define

带参数的宏定义: #define ()

#if、#elif 、#else、#endif: 条件编译,类似if选择语句,不过是根据条件选择代码块进行编译

#ifdef、 #ifndef、#undef、#if defined、#if !defined: 判断是否定义,未定义以及取消某个宏

还有调试时使用的一些宏:__LINE__: 内置宏,代表该行代码的所在行号

__FILE__: 内置宏 代表源文件的文件名

__DATE__: 表时间,形式为月/日/年的字符串,表示源文件被翻译到代码时的日期

__TIME__ : 表时间,形式为时:分:秒的字符串,

__STDC__ : 如果实现遵循ANSI规定的C标准,是十进制的数字1,否则不为1

__VA_ARGS__ :可变参数

类似标签特殊作用的宏:# : 字符串化标签,把“#”标签右边的内容转换成字符串

## : 连接标签,连接“##”标签左右的内容连接在一起

宏的一些常见应用

1、 定义简单的字面量,进行替换1

2

3#define kAllCount 13

#define kIdentifier @"identifier"

2、代替简单的函数功能1

2

3#define sum(x,y) x+y // 代替函数求和

#define multiplication(x,y) x*y // 代替函数求积

实际上上面的两个宏的使用是不严谨的,因为宏只是简单的替换,如上面的宏的参数x和y并不仅仅是数字还可能是表达式,下面测试下。1

2

3

4

5

6

7

8

9

10

11

12

13

14NSLog(@"muti result is: %d", multiplication(2, 10));

NSLog(@"sum result is: %d", sum(2, 10));

NSLog(@"muti result is: %d", multiplication(2+3, 10));

NSLog(@"sum result is: %d", sum(2+3, 10));

跑出来的结果如下:

2014-08-09 11:03:58.346 Test[3576:402410] muti result is: 20

2014-08-09 11:03:58.346 Test[3576:402410] sum result is: 12

2014-08-09 11:03:58.346 Test[3576:402410] muti result is: 32

2014-08-09 11:03:58.346 Test[3576:402410] sum result is: 15

可以看第三个输出和我们预想的不一样,分析一下就发现multiplication(2+3, 10)替换后的结果是2+3*10,因为宏只是简单的替换,所以在使用中要特别注意这一点。解决方法就是把#define multiplication(x,y) x*y 改为 #define multiplication(x,y) (x)*(y)。重新测试下,结果和预期的一样。1

2

3

4

5

6

7

8

9

10

11

12

13

14NSLog(@"muti result is: %d", multiplication(2, 10));

NSLog(@"sum result is: %d", sum(2, 10));

NSLog(@"muti result is: %d", multiplication(2+3, 10));

NSLog(@"sum result is: %d", sum(2+3, 10));

跑出来的结果如下:

2014-08-09 11:11:02.008 Test[3576:402410] muti result is: 20

2014-08-09 11:11:02.009 Test[3576:402410] sum result is: 12

2014-08-09 11:11:02.009 Test[3576:402410] muti result is: 50

2014-08-09 11:11:02.009 Test[3576:402410] sum result is: 15

3、 用于控制1

2

3

4

5

6

7

8

9

10

11

12#define DebugMode

#define NormalMode

#ifdef DebugMode

加载A代码块

#else

加载B代码块

#endif

c语言 define宏名称if(参数),宏编程基础内容相关推荐

  1. c语言 define宏名称if(参数),iOS深思篇 | 宏定义

    一. 简介 宏是一种批量处理的称谓,简单来说就是根据定义好的规则替换一定的文本.替换过程在程序编译期,也因此大量使用宏会造成编译时间变长:而且替换过程不进行类型安全检查;还需要注意"边缘效应 ...

  2. 大牛深入浅出讲解C语言#define宏定义应用及使用方法

    在C语言中,我们使用#define来定义宏.在C程序编译的预处理阶段,预处理器会把宏定义的符号替换成指定的文本. 不带参数的宏 关于宏最常见的就是用来定义数值常量的名称,即没有参数的宏定义,采用如下形 ...

  3. 深入浅出讲解C语言#define宏定义应用及使用方法

    在C语言中,我们使用#define来定义宏.在C程序编译的预处理阶段,预处理器会把宏定义的符号替换成指定的文本. 不带参数的宏 关于宏最常见的就是用来定义数值常量的名称,即没有参数的宏定义,采用如下形 ...

  4. 深入理解C语言——#define宏和枚举的区别

    (1)从处理过程的角度看: #define宏是由编译预处理器在预编译处理时处理的,而且只做简单的字符串的替换.枚举常量则是在编译的时候确定其值的. (2)从调试的角度看: 通常情况下,在编译器里,可以 ...

  5. makefile使用宏及用法$(宏标识符) $(cc)_宏编程的艺术

    微信限制:不能放置链接,代码样式比较奇怪,发布后不能更新... 推荐 阅读原文: 写在前面 之前写过几篇关于 C/C++ 宏 (macro) 和 C++ 元编程 (metaprogramming) 的 ...

  6. 关于C语言define宏定义字符串常量

    1.问题由来: 本人一直以为宏对于字符串的处理也是直接在预处理时进行替换:但是最近在工作中遇到了字符串宏+1的情况:于是彻底的颠覆了以前的思维:于是乎进行测试验证得出以下结果. 2.测试代码 /*测试 ...

  7. C语言#define宏定义可能注意不到的地方

    #define使用的核心:直接替换 我也觉得自己很清楚这一点,但看到这一道输出程序片段结果题,还是懵了.大家也可以在不看我下方答案的情况下,自己做一下,题目如下: #include<stdio. ...

  8. 关于C语言刷题(#define宏定义函数的常见错误)

    关于C语言刷题(#define宏定义函数的常见错误) 首先我们来先看对#define的定义 define,宏定义,C语言中预处理命令一种.分为无参宏定义和带参宏定义.无参宏定义的一般形式为:#defi ...

  9. C语言 | 预处理 | 宏定义 | #define | 定义函数

    文章目录 预处理 预处理运算符 宏定义 无参宏定义 带参宏定义 宏定义-定义函数 此文主要介绍宏定义,并在介绍宏定义时举例介绍预处理命令 预处理 参考:C 预处理器 | 菜鸟教程 重要的预处理器指令如 ...

最新文章

  1. html在页面上div绝对定位,html – 中心浮动div在绝对定位div内
  2. Kotlin的解析(中)
  3. php flink,plus/flink.php · 辉辉菜/三强源码 - Gitee.com
  4. 直播分享|邓文彬:如何在GPU/CPU/移动端高效训练和推断CNN网络
  5. wxWidgets:wxMultiChoiceDialog类用法
  6. react循环setstate_[React] 8 - React 自身或工程性能优化点?
  7. Java 获取当前项目的类路径
  8. docker学习笔记18:Dockerfile 指令 VOLUME 介绍
  9. C++之static关键字探究
  10. Lintcode57 3Sum solution 题解
  11. vue获取client为0_vue document.documentElement.clientHeight为0
  12. Thinkpad E475换装Win7后,网络连接无故中断无法再次连接的问题
  13. VMware桥接模式下虚拟机ping主机不通
  14. LSTM之父发文:2010-2020,我眼中的深度学习十年简史
  15. 门控时钟:Clock fating
  16. 拖动图形验证码(极验验证)
  17. 用Intellij IDEA 创建第一个Spring MVC项目
  18. eclipse设置maven archetype
  19. kmp算法中字符串前后缀公共长度的总结
  20. 计算机科学与技术发表文章,计算机科学与技术学院粆倩文老师的文章在顶级学术期刊IEEE TVCG上发表...

热门文章

  1. 学习计划Current(2019.4.23)
  2. Build your own distribution based on Fedora CoreOS
  3. 大页内存的使用:HugePages(大内存页)的原理与使用
  4. Linux开机启动过程(4):切换到64位模式-长模式(直到内核解压缩之前)
  5. (2)Linux进程调度器-CPU负载
  6. mac上sublime配置php环境,Mac下sublime text3如何配置php编译环境?
  7. c# npoi 公式不计算_玉米扣量因素:水分、杂质、不完善粒、生霉粒,检测方法及计算公式...
  8. web前端基础(01html基本标签)
  9. easyui datagrid如何自适应浏览器的宽度和高度
  10. mysql2005本地连接_sql2005连接配置详细图解