#define 宏名 替换文本 // 无参
1、# 可以不在行首,但只允许它前面有空格符
2、标识符和替换列表之间不能加赋值号 =,替换列表后不能加分号
3、由于宏定义仅是做简单的文本替换,故替换列表中如有表达式,必须把该表达式用括号括起来,否则可能会出现逻辑上的 “错误”
4、当替换列表一行写不下时,可以使用反斜线 \ 作为续行符延续到下一行(续行符后直接按回车键换行,不能含有包括空格在内的任何字符,否则是错误的宏定义形式)

#define 标识符 (参数 1, 参数 2,..., 参数 n) 替换列表 // 有参
1、标识符与参数表的左括号之间不能有空格,否则预处理器会把该宏理解为普通的无参宏定义
2、宏替换列表中每个参数及整个替换列表,都必须用一对小括号 () 括起来,否则可能会出现歧义

#undef 标识符 // 删除宏定义

宏定义规则:
1、只要一条宏定义语句里包含有操作符,就一个用括号把它括起来
2、宏定义越紧凑越好;表达式比语句好,单条语句比多条语句好
3、在宏定义应避免使用有副作用的表达式及会导致二义性或副作用的 C 语言元素(如自增自减运算符)
4、宏越简单越好,如果无法得到一个简单的宏,就应该把它定义为一个函数
5、一定要让对宏进行扩展得到的字符串 —— 不管它是一个表达式、一条语句(不包括表示语句结束的分号)、还是一个语句块 —— 成为一个完整的 C 语言元素

const 与 define。两者都可以用来定义常量,但是 const 定义时,定义了常量的类型,所以更精确一些。#define 只是简单的文本替换,除了可以定义常量外,还可以用来定义一些简单的函数,有点类似内联函数 (Inline)。const 和 define 定义的常量可以放在头文件里面。

更新于

请我喝[茶]~( ̄▽ ̄)~*

十月秋枫 wx好友

wx好友

十月秋枫 微信支付

微信支付

十月秋枫 支付宝

支付宝