#define 常量
使用预处理器常量。
#define 常量 是 CoddyKit 上的免费 C Academy 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 C Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 C Academy 课程共包含 4 节课。
#define 的作用
#define 是一种预处理器指令,用于创建宏:预处理器会在编译前将宏名称替换为文本。
它通常用于为固定值提供易读的名称,例如缓冲区大小或限制值。
#define MAX_LEN 256文本替换
宏就是纯文本替换。无论 MAX_LEN 出现在哪里,预处理器都会在那里写入 256。
它没有类型,也不占用内存;这一过程发生在编译器看到代码之前。
#include <stdio.h>
#define MAX_LEN 256
int main(void) {
printf("%d\n", MAX_LEN);
return 0;
}不要加分号
一个常见错误是在 #define 末尾加上分号。
分号会成为替换文本的一部分,并可能导致令人困惑的错误。请不要加分号。
#define PI 3.14159 /* correct */
#define BAD 10; /* wrong: semicolon is substituted too */定义浮点常量
宏适用于任何字面量,包括浮点值。
这里的 PI 会在每次使用时被替换到面积公式中。
#include <stdio.h>
#define PI 3.14159
int main(void) {
double r = 2.0;
printf("%.2f\n", PI * r * r);
return 0;
}用于数组大小的宏
宏常用于指定数组大小,因为该值必须在编译时确定。
使用名称可以将大小集中在一个位置,也便于修改。
#include <stdio.h>
#define SIZE 5
int main(void) {
int data[SIZE] = {1, 2, 3, 4, 5};
printf("%d\n", data[SIZE - 1]);
return 0;
}始终为表达式加括号
如果宏展开后是一个表达式,请将它括在括号中。
如果没有括号,当宏用于更大的表达式内部时,运算符优先级可能会改变其含义。
#define WIDTH (4 + 2) /* good */
#define BADW 4 + 2 /* risky: 10 * BADW becomes 10*4+2 */括号为何重要
这个程序展示了其中的差异。加括号时,WIDTH 会作为整体参与乘法;不加括号时,只有其中一部分会参与乘法。
安全版本会输出 60,而不安全的展开结果会有所不同。
#include <stdio.h>
#define WIDTH (4 + 2)
int main(void) {
printf("%d\n", 10 * WIDTH);
return 0;
}字符串宏
宏也可以表示字符串字面量,这对于固定消息或版本名称很方便。
文本会被原样替换,包括引号在内。
#include <stdio.h>
#define APP_NAME "CoddyKit"
int main(void) {
printf("Welcome to %s\n", APP_NAME);
return 0;
}#define 与 const
宏没有类型和地址;const 变量同时具有类型和地址,并且遵循作用域规则。
当您需要类型安全和便于调试时,应优先使用 const。对于数组大小等编译时常量,则使用 #define。
#define M_SIZE 10
const int c_size = 10;取消宏定义与保护
您可以使用 #undef 删除宏。宏还可以用于头文件保护,防止重复包含。
这里展示的是一种用于头文件开头的经典保护模式。
#ifndef CONFIG_H
#define CONFIG_H
/* header contents here */
#endif命名惯例
按照长期形成的惯例,宏名称使用大写加下划线的形式。
这种写法能在视觉上将它们标记为预处理器常量,也能帮助您避免与普通变量名称冲突。
#include <stdio.h>
#define BUFFER_SIZE 1024
int main(void) {
printf("%d\n", BUFFER_SIZE);
return 0;
}快速检查
检验您对宏的理解。
回顾
#define 会创建宏,预处理器以文本形式替换它们;宏没有类型、没有分号,也不占用内存。
请为表达式加括号,并优先使用 const 表示类型安全的值;对于数组大小和头文件保护等编译时需求,再使用宏。
常见问题解答
「#define 常量」课时是免费的吗?
是的 — 「#define 常量」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 C Academy 课程的其余内容,请升级到 CoddyKit PRO。 C Academy 课程共包含 4 节课。
「#define 常量」这节课中我会学到什么?
使用预处理器常量。 你通过在浏览器中直接运行的动手代码来练习 C Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 C Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 C Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。
「#define 常量」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 C Academy 课中编写并运行代码吗?
能。每节 C Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。