第3章 预处理

1.下面两行代码都是错的。因为注释先于预处理指令被处理,当这两行被展开成“//……”和“/*……*/”时,注释已处理完毕,所以出现错误

#define BSC //
#define BMC /*
#define EMC */ BSC my single - line comment
BMC my multi - line comment EMC

【规则 3-1】函数宏的调用不能缺少参数,如果此函数宏有参数的话。

【规则 3-2】在定义函数宏时,每个参数实例都应该小括号括起来,除非它作为#或##的操作数。

2.条件编译

  • 第1种形式
#ifdef  标识符
程序段
#else
程序段
#endif
  • 第2种形式
#ifndef  标识符
程序段
#else
程序段
#endif
  • 第3种形式
#if 常量表达式
程序段
#else
程序段
#endif

3.#error预处理

编译程序时,只要遇到#error就会生成一个编译错误提示消息,并停止编译。语法格式为

#error error-message

4.#line预处理

#line的作用是改变当前行数和文件名称

(作用:编译器对C源码编译的过程中会产生一些中间文件,通过这条指令,可以保证文件名是固定的,不会被中间文件代替,有利于分析)

5.#pragma message

能够在编译消息输出窗口中输出相应的信息。

#pragma message(“消息文本”)

6.#pragma pack 和内存对齐问题

  对 字,双字和四字来说,自然边界分别是偶数地址,可以被4整除的地址和可以被8整除的地址。原因在于为了访问未对齐的内存,处理器需要做两次内存访问;然而对于对齐的内存访问仅需要一次访问。

#pragma pack(n)   //编译器将按照n字节对齐
#pragma pack() //取消自定义字节对齐方式
  • 每个成员分别按自己的方式对齐,并能最小化长度
  • 复杂类型(如结构)的默认对齐方式是他的最长的成员的对齐方式,这样在成员是复杂类型时,可以最小化长度
  • 对齐后的对齐后的长度必须是成员中最大的对齐参数的整数倍,这样在处理数组时可以保证每一项都边界对齐

7.“#”运算符

8.“##”运算符

《C语言深度解剖》学习笔记之预处理的更多相关文章

  1. C语言深度解剖读书笔记

    开始本节学习笔记之前,先说几句题外话.其实对于C语言深度解剖这本书来说,看完了有一段时间了,一直没有时间来写这篇博客.正巧还刚刚看完了国嵌唐老师的C语言视频,觉得两者是异曲同工,所以就把两者一起记录下 ...

  2. C语言深度解剖读书笔记(6.函数的核心)

    对于本节的函数内容其实就没什么难点了,但是对于函数这节又涉及到了顺序点的问题,我觉得可以还是忽略吧. 本节知识点: 1.函数中的顺序点:f(k,k++);  这样的问题大多跟编译器有关,不要去刻意追求 ...

  3. 【转】 C语言深度解剖读书笔记(1.关键字的秘密)

    本文出处:http://blog.csdn.net/mbh_1991/article/details/10149805 开始本节学习笔记之前,先说几句题外话.其实对于C语言深度解剖这本书来说,看完了有 ...

  4. c语言深度解剖(笔记)

    1.1最宽恒大量的关键字----auto 函数内部变量,限制作用域为这个 1.2.1最快的关键字---- register函数. 关键字请求编译器尽可能的将变量存在 CPU 内部寄存器中 1.2.2使 ...

  5. R语言与机器学习学习笔记

    人工神经网络(ANN),简称神经网络,是一种模仿生物神经网络的结构和功能的数学模型或计算模型.神经网络由大量的人工神经元联结进行计算.大多数情况下人工神经网络能在外界信息的基础上改变内部结构,是一种自 ...

  6. go语言,golang学习笔记4 用beego跑一个web应用

    go语言,golang学习笔记4 用beego跑一个web应用 首页 - beego: 简约 & 强大并存的 Go 应用框架https://beego.me/ 更新的命令是加个 -u 参数,g ...

  7. go语言,golang学习笔记3 用命令下载框架报错问题解决 设置环境变量

    go语言,golang学习笔记3 用命令下载框架报错问题解决 设置环境变量 下载安装:go get github.com/astaxie/beego 首页 - beego: 简约 & 强大并存 ...

  8. go语言,golang学习笔记2 web框架选择

    go语言,golang学习笔记2 web框架选择 用什么go web框架比较好呢?能不能推荐个中文资料多的web框架呢? beego框架用的人最多,中文资料最多 首页 - beego: 简约 & ...

  9. go语言,golang学习笔记1 官网下载安装,中文社区,开发工具LiteIDE

    go语言,golang学习笔记1 官网下载安装,中文社区,开发工具LiteIDE Go语言是谷歌2009发布的专门针对多处理器系统应用程序的编程进行了优化,使用Go编译的程序可以媲美C或C++代码的速 ...

  10. R语言与显著性检验学习笔记

    R语言与显著性检验学习笔记 一.何为显著性检验 显著性检验的思想十分的简单,就是认为小概率事件不可能发生.虽然概率论中我们一直强调小概率事件必然发生,但显著性检验还是相信了小概率事件在我做的这一次检验 ...

随机推荐

  1. JQuery--extend的使用

    $.extend({a,b,c},{a,bd}); 里面的对象属性如果 存在就替换,如果不存在就添加 var loadData = function (order) { var obj = getPa ...

  2. [转]了解screen对象的常用视图属性

    前面的话 screen对象基本上只用来表明客户端的能力,其中包括浏览器窗口外部的显示器的信息,如像素高度和宽度等.每个浏览器中的screen对象都包含着各不相同的属性.本文将详细介绍screen对象的 ...

  3. 读书笔记--Head First 设计模式 目录

    1.设计模式入门 2.观察者模式 3.装饰者模式 4.工厂模式 5.单件模式 6.命令模式 7.适配器模式与外观模式 8.模板方法模式 9.迭代器与组合模式 10.状态模式 11.代理模式 12.复合 ...

  4. spring深入学习(六)-----springmvc

    MVC设计模式 有过一定开发经验的人肯定都知道这个模式,先简单介绍下这种模式,然后再去讨论为啥要这么设计: 传统的web应用中应该主要包括这些组件,不同组件负责不同的模块. 数据实体:POJO 数据层 ...

  5. spring JdbcTemplate最基本的使用

    package com.com.jdbctemplate; import org.springframework.jdbc.core.JdbcTemplate; import org.springfr ...

  6. VI/VIM编辑器快捷键

    常用快捷键: Ctrl+f        向下翻页 Ctrl+b       向上翻页 G                移动到文件最后一行 gg              移动到文件第一行 N+回车 ...

  7. 【CodeVS】1083 Cantor表

    1083 Cantor表 1999年NOIP全国联赛普及组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 白银 Silver 题目描述 Description 现代数学的著名证明之 ...

  8. 一位AI研究员+区块链创业者的终极展望:AI DAO将统治世界

    一位AI研究员+区块链创业者的终极展望:AI DAO将统治世界 [日期:2017-01-09] 来源:infoq.com  作者:杨赛 [字体:大 中 小] Trent McConaghy是一位资深的 ...

  9. WPF MVVM简单介绍

     前面文章中,我们已经知道,WPF技术的主要特点是数据驱动UI,所以在使用WPF技术开发的过程中是以数据为核心的,WPF提供了数据绑定机制,当数据发生变化时,WPF会自动发出通知去更新UI. 我们不管 ...

  10. [Vue CLI 3] 配置解析之 parallel

    官方文档中介绍过在 vue.config.js 文件中可以配置 parallel,作用如下: 是否为 Babel 或 TypeScript 使用 thread-loader. 该选项在系统的 CPU ...