宏、预编译(day12)
指针数组里的每个存储区是一个指针类型
的存储区
字符指针数组里包含多个字符类型指针,其中
每个指针可以表示一个字符串
字符指针数组可以用来表示多个相关字符串 主函数的第二个参数是一个字符指针数组,
其中每个指针代表一个字符串,所有
这些字符串的内容都来自于用户的命令
主函数的第一个参数是一个整数,它表示
第二个参数里的指针个数 #define预处理指令可以用来定义宏 宏可以用来给数字起名字
定义宏的时候要把宏名称写在#define预处理
指令后,宏名称后写它所代表的数字
宏名称通常由大写英文字母构成
宏名称里不可以包含空格
用宏给数字起名字的时候不可以使用赋值
操作符
可以在程序里使用宏名称代表它所对应的数字,
编译器会把程序里的所有宏名称替换成
它所代表的数字 可以在编译命令里使用-D选项临时指定
宏所代表的数字 宏还可以给一个计算公式起名字
计算公式里包含未知数字,宏的参数用来
表示这些未知数字 编译器采用二次替换的方式处理带参数的宏 宏的参数不一定代表数字,所以它没有类型
如果宏有多个参数就需要用逗号把他们分开 宏不可以使用自己的存储区和函数进行数据
传递
宏没有形式参数也没有用来存放返回值的
存储区 能当作数字使用的宏必须编写成一个表达式
(因为宏没有用来记录返回值的存储区) 宏的参数直接代表函数的存储区,在宏里对
参数内容的修改可以直接影响函数 因为宏没有用来记录返回值的存储区,所以
不能保证优先计算宏里面的操作符
所有能当作数字使用的宏必须写在一对小括号
里面 宏没有形式参数所以不能保证优先计算参数
里面的操作符
编写宏的时候所有能当做数字使用的参数也都
必须写在小括号里面 不要把自增或自减的结果作为宏的参数使用 编写宏的时候可以使用一些特殊的符号,它们
叫做宏操作符 #是一个宏操作符,它可以把宏的参数转换
成字符串字面值
##也是一个宏操作符,它可以把一个代表
标识符的参数和其他内容连接得到
一个新的标识符 条件编译可以在编译的时候从几组语句里
选择一组编译而忽略其他组
#ifdef/#ifndef...#else...#endif
以上结构可以根据一个宏名称是否被定义过
从两组语句中选择一组编译
最开始的预处理指令应该从两个里选择一个,
它们的后面都要跟着一个宏名称
如果选择#ifdef就表示它后面的宏名称被定义
过就编译前一组语句,否则编译后一组
语句
如果选择#ifndef就刚好相反 #if...#elif(任意多次)...#else...#endif
这个结构也可以实现条件编译,它可以根据
任意逻辑表达式从多组语句中选择一组
编译
宏、预编译(day12)的更多相关文章
- C中的预编译宏定义
可以用宏判断是否为ARC环境 #if _has_feature(objc_arc) #else //MRC #endif C中的预编译宏定义 -- 作者: infobillows 来源:网络 在将一 ...
- C++头文件中预编译宏的目的
C++头文件中预编译宏的目的 eg: #ifndef _FACTORY_H_#define _FACTORY_H_......#endif //~_FACTORY_H_ 防止头文件被重复包含,导致变量 ...
- Visual Studio 2013 配置多个Release版本,并为每个版本配置预编译的宏
最近开发过程中,需要将同一份工程编译成两个版本,分别为ReleaseA和ReleaseB. ReleaseB比ReleaseA少了部分功能,所以希望在编译的时候,根据不同的版本编译工程中相应的代码. ...
- C++ 内置宏定义 与 预编译指令
内置宏和预编译指令, 在代码调试.单元测试.跨平台代码中经常会用到.这里记录一下. 1. 内置宏 (文件名,当前行号,当前日期,当前时间,当前执行方法名) __FILE____LINE____DATE ...
- linux, windows, mac, ios等平台GCC预编译宏判断
写跨平台c/c++程序的时候,需要搞清各平台下面的预编译宏,区分各平台代码.而跨平台c/c++编程,GCC基本在各平台都可以使用.整理了一份各平台预编译宏的判断示例. 需要注意几点: * window ...
- GCC预编译宏查看
编译调试代码时,总是遇到要使用编译器预编译宏进行跨平台编译. gcc -E -dM -</dev/null 编译器版本 Thread model: posix gcc version 5.4.0 ...
- ObjC宏定义-预编译小功能
以前看来#号,好像只是预编译,原来它还可以有跟Swift中"\( )"的拼接功能 例如: #define string(x) #x 意思就是 string(x) = "x ...
- C语言的傻瓜式随笔(二):全局变量、预编译、goto
函数的作用:可以实现代码的重用. 函数只需要定义1次,那么函数中的代码就可以随意的调用. -某不知出处的基本概念 学而时习之,如有误笔,请指正 一.goto跳转语句 goto在C语言的作用 ...
- C#预编译
在C#开发中经常会遇到在Debug和Release模式下需要执行不同代码的情况,这个时候使用C#条件编译可以很好地解决这个问题,如 #if DEBUG // TO Do Debug Mode Code ...
- iOS中的预编译指令的初步探究
目录 文件包含 #include #include_next #import 宏定义 #define #undef 条件编译 #if #else #endif #if define #ifdef #i ...
随机推荐
- 让devstack中的vm訪问外网
devstack默认会建立一个Public网络,地址为172.24.4.0/24,可是这个网络并非运营商分配给我们的网络.所以仅仅能通过nat的方式让devstack建立的虚拟机訪问外网. br-ex ...
- 以"小刀会“的成败论当今创业成败
讲起"小刀会",熟悉的人或许非常熟悉,不熟悉的人或许根本不知道清末有这样一个组织. 依据翻查史料,最初的小刀会是在福建成立的,来源有两个.一个是天地会的分支,一个是白莲教分支. 而 ...
- 《JAVA程序设计》实训第一天——《猜猜看》游戏
课程实训是做一个猜猜看的小游戏.对于对代码不熟悉不了解的我来说的确挺难的.可是我还是会努力的. import java.awt.EventQueue; import javax.swing.JFram ...
- php生成随机password的几种方法
文章来源:PHP开发学习门户 地址:http://www.phpthinking.com/archives/523 使用PHP开发应用程序,尤其是站点程序.经常须要生成随机password,如用户注冊 ...
- Cocos2d-x飞机大战教程笔记
咳咳~跟着大神的教程学做Cocos2d-x的飞机大战...鉴于我是那种跟着教程都会出非常多错的人,所以还是一路跟着做些笔记比較好.并且因为是用课余时间,所以仅仅能断断续续地做,写下来也好让自己别忘记~ ...
- @ConfigurationProperties注解
@Value获取值和@ConfigurationProperties获取值比较 | | @ConfigurationProperties | @Value | | ------- ...
- EMC 存储管理
第一章EMC 产品介绍 1.1. 名词介绍 DAE——磁盘笼.用于装载磁盘的柜子. ◆Disk processor enclosure——含磁盘的控制器单元.存储系统的主要设备,内含存 ...
- 【POJ 3074】 Sudoku
[题目链接] http://poj.org/problem?id=3074 [算法] 将数独问题转化为精确覆盖问题,用Dancing Links求解 转化方法如下 : 我们知道,在一个数独中 : 1. ...
- PCB 电测试--测试点数自动输出到流程指示中(读取TGZ Stephdr文件)
好不容易实现了 <PCB 无需解压,直接读取Genesis TGZ指定文件 > 正好这里有一项需求:PCB电测试--测试点数自动输出到流程指示中 一.自动输出测试点小结; 1.由于历史原因 ...
- Oracle创建用户教程
计算机-->管理-->应用程序与服务-->(OracleOraDb11g_home1TNSListener 和 OracleServiceORCL 服务)->启动服务 打开Or ...