#define定义常量

基本语法

 #define name stuff
//(#define)(变量名)(定义的数值)

这里记得,是不加分号的 

定义常量(这里 就要涉及我们经常说的宏定义)

定义常量的使用 

  1. 提高代码可读性: 常量可以帮助开发者理解代码的含义。例如,使用常量 MAX_USERS 比 使用数字 100 更能表达一个变量应该表示的最大用户数。

  2. 便于维护: 如果一个值在程序中多次使用,比如一个应用的版本号,将其定义为常量(如 VERSION)可以使得未来的更新更加容易。你只需要改变常量的定义,而不是每一个出现该值的地方。

  3. 避免魔法数: 魔法数(Magic Numbers)是指在代码中直接出现的、没有解释的数字。使用常量代替魔法数可以增加代码的可读性和可维护性。

  4. 配置管理: 对于需要在不同环境中部署的应用程序,常量可以用来管理配置参数,如数据库连接字符串、API密钥等。这些值可以在不修改代码的情况下,通过外部配置文件或环境变量来设置。

  5. 条件编译: 在C语言中,可以使用条件编译指令 #ifdef#ifndef#if 等,结合常量定义来控制哪些代码应该在编译时包含或不包含。这可以用于创建跨平台的代码或者在调试版本和生产版本之间切换。

  6. 性能优化: 编译器通常会对常量表达式进行优化,因为它们的值在编译时是已知的。这可以提高程序的执行效率。

  7. 接口和API设计: 在设计库、框架或API时,常量可以用来定义固定的参数值、错误代码、状态标识等,使得用户更容易理解和使用这些接口。

#include <stdio.h>

#define PI 3.14159
#define MIN_RADIUS 10.0
#define MAX_RADIUS 100.0

double calculateArea(double radius) {
    if (radius < MIN_RADIUS || radius > MAX_RADIUS) {
        printf("半径必须在 %f 和 %f 之间。\n", MIN_RADIUS, MAX_RADIUS);
        return -1;
    }
    return PI * radius * radius;
}

int main() {
    double radius = 20.0;
    double area = calculateArea(radius);
    if (area >= 0) {
        printf("半径为 %f 的圆的面积是:%.2f\n", radius, area);
    }
    return 0;
}

 定义常量使用的注意事项

 1.常量在使用期间是直接进行宏替换的

比如:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#define MAX 3+5//(这里我们定义了一个常量)
int main()
{
	int n = 2;
	int m = 3;
	int count = n * MAX * m;//n*3+5*3=2*3+5*3=6+15=21
	printf("%d ", count);//此时的数值的21
	return 0;
}

2.定义的宏后面是不加分号的(不加分号不是不能加,而是加分号容易出错)(本质上还是直接进行宏替换)

比如

3.使用宏定义常量的时候,在还不熟悉的时候,你直接进行带入计算,不要想着直接计算宏,而是带入以后,根据运算符的顺序进行先后计算。

定义常量在编译期间的使用

当我们定义好之后,我需要知道,宏是如何在计算机里面进行运行的,首先是预处理生成.i文件(在csdn编译速通里面我们已经讲到了,这里复述一遍)

翻译环境的过程
1,我们写的代码先创建文件test.c的文件,也就是test.c,然后经过编译器的处理,生成目标文件(test.obj)也就是(obj)

2,目标文件和链接库一起经过链接器的处理,生成可执行程序。

3,生成目标文件(obj)的过程称之为编译(也就是生成obj的过程)

4,生成可执行程序的过程称之为链接。

5,最后整个我们写代码的地方也就是集成开发环境

而我们的宏定义常量的时候,直接就是在.i文件里面就已经完成了替换,.i文件也就是翻译环境里面的编译。我们了解就好。 

这里会进行替换,在.i文件里面,全部替换成常量

在 i文件里面 可以 很好的说明

当然我们,也可以这样定义 #define str for( ::);

#define str(变量名称) for( ::)(给一个循环);

什么意思呢,什么进行图解说明一下

#include <stdio.h>

#define FOREVER for (;;)

int main() {
    int count = 0;

    FOREVER {
        printf("这是第 %d 次循环\n", count);
        count++;

        // 在某种条件下退出循环
        if (count >= 10) {
            break;
        }
    }

    printf("已退出无限循环。\n");

    return 0;
}

 这里会 进行无线循环打印,但是我们给一个判断条件

续行符号

续行符号在下面的定义宏里面会二次详解,这里了解一下 

 在C语言中,续行符号用于将一行代码延续到下一行。这通常在以下情况下使用:
1. 当一行代码太长,超出了编辑器或标准推荐的80个字符的宽度限制时。
2. 为了提高代码的可读性,将长的表达式或参数列表分成多行。

续行符号是反斜杠 `\`,它放在行的末尾,表示该行将在下一行继续。在C语言中,续行符号只能在以下情况下使用:
- 在字符串字面量中,用于创建跨越多行的字符串。
- 在宏定义中,用于将宏的定义延续到下一行。
- 在预处理指令中,用于将指令延续到下一行。

下面是一些使用续行符号的例子:

1. **字符串字面量的续行**:
   ```c
   char* message = "这是一个非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常长的字符串。";
   ```
   可以使用续行符号将其分成多行:
   ```c
   char* message = "这是一个非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常\
                    非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常\
                    长的字符串。";
   ```
2. **宏定义的续行**:
   ```c
   #define LONG_MACRO(x, y) x ## y \
                            x ## _ ## y \
                            y ## _ ## x
   ```
   在这个例子中,宏 `LONG_MACRO` 被定义为三个部分的组合,每个部分都在新的一行上。
3. **预处理指令的续行**:
   ```c
   #include <stdio.h> \
          <stdlib.h> \
          <string.h>
   ```

虽然在实际中,`#include` 指令通常不使用续行符号,因为每个头文件都应该单独一行,但这个例子展示了如何使用续行符号。
请注意,续行符号不能用于一般代码的断行,比如在表达式或语句的中间。如果您需要在代码中换行,您应该将表达式或语句合理地分成多个部分,并确保每个部分都是有效的C语言表达式或语句。

当然我们也可以写成这样,后面的宏定义和运算符李米娜我们会讲解到。这里了解一下。

  • 29
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值