#define的多行定义

define可以替代多行的代码,例如MFC中的宏定义(非常的经典,虽然让人看了恶心)

#define MACRO(arg1, arg2) do { /
/* declarations */ /
stmt1; /
stmt2; /
/* ... */ /
} while(0) /* (no trailing ; ) */
关键是要在每一个换行的时候加上一个"/"

<think>我们正在讨论C语言中如何使用#define定义字符串常量。根据引用[1],我们知道#define的基本用法是为标识符赋值,包括数值和字符串。引用[2]则介绍了#运算符用于字符串化,但这里我们更关注直接定义字符串常量。在C语言中,使用#define定义字符串常量有两种常见方式:1.直接定义整个字符串为常量。2.使用#运算符将宏参数转换为字符串(但这属于带参数的宏,我们这里先讨论简单定义)。例如,我们可以这样定义一个字符串常量:#defineGREETING"Hello,World!"这样,在代码中所有出现GREETING的地方都会被替换为"Hello,World!"。另外,我们也可以定义多个字符串,或者使用转义字符。下面给出具体示例和说明。</think>在 C 语言中,使用 `#define` 定义字符串常量有两种主要方式: ### 1. 直接定义字符串字面量 这是最常用的方法,使用双引号包裹字符串: ```c #define GREETING "Hello, World!" #define FILE_PATH "C:\\Documents\\file.txt" #define WARNING_MSG "⚠️ Critical system error!" ``` **使用示例:** ```c #include <stdio.h> #define WELCOME_MSG "Welcome to the program!" #define EXIT_PROMPT "Press any key to exit..." int main() { printf("%s\n", WELCOME_MSG); // 输出:Welcome to the program! printf("%s\n", EXIT_PROMPT); // 输出:Press any key to exit... return 0; } ``` ### 2. 使用 `#` 运算符(字符串化) 通过 `#` 运算符将宏参数转换为字符串字面量: ```c #define STRINGIFY(x) #x #define TO_STRING(x) STRINGIFY(x) ``` **使用示例:** ```c #include <stdio.h> #define VERSION 2.1.5 #define STRINGIFY(x) #x #define VERSION_STR STRINGIFY(VERSION) int main() { printf("App version: %s\n", VERSION_STR); // 输出:App version: 2.1.5 printf("File: %s\n", STRINGIFY(main.c)); // 输出:File: main.c return 0; } ``` ### 关键注意事项: 1. **转义特殊字符**:路径中的反斜杠需要双写 ```c #define LOG_FILE "C:\\logs\\app.log" // 正确 #define BAD_PATH "C:\logs\app.log" // 错误(会触发警告) ``` 2. **多行字符串**:使用反斜杠 `\` 连接 ```c #define MULTI_LINE "Line 1\n" \ "Line 2\n" \ "Line 3" ``` 3. **与字符常量的区别**: ```c #define CHAR_A 'A' // 字符常量(单引号) #define STR_A "A" // 字符串常量(双引号) ``` 4. **拼接技巧**:相邻字符串会自动拼接 ```c #define NAME "Alice" printf("Hello " NAME "!\n"); // 输出:Hello Alice! ``` > ⚠️ 注意:`#define` 是预处理指令,在编译前进行文本替换,不进行类型检查[^1]。定义字符串常量时通常使用全大写字母命名(如 `MAX_PATH`)以区别于变量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值