C语言 17 宏定义

前面认识了#include指令,接着来看#define指令,它可以实现宏定义。宏是啥意思?

在这里插入图片描述

把参数批量替换到文本中,这种实现通常称为(macro)或定义宏 (define macro)

可以通过#define来定义宏,规则如下:

#define 宏名(记号) 内容

比如现在想通过宏定义一个PI:

#define PI 3.1415926

这样就可以了,那么怎么去使用它呢?

#include <stdio.h>

#define PI 3.1415926

int main() {
    // 就像使用变量一样,我们可以直接将PI放到这个位置
    printf("π的值为:%f", PI);  
}
π的值为:3.141593

在编译时,预处理程序会进行宏替换操作,也就是将程序中所有的PI全部替换为3.1415926,注意这个跟类型无关,是赤裸裸的纯文本替换,也就是相当于把代码修改了,PI那里直接变成3.1415926,当然如果你定义为其他任意的内容,同样会替换到那个位置,但是至于替换之后程序还正不正常就不知道了。

通过下面这个例子来加深对文本替换这句话的理解:

#include <stdio.h>

#define M a + b

int main() {
    int a = 10, b = 20;
    printf("%d", M * a);
}
210

如果按照一般思维,M 是 a + b,那么替换上去之后应该就是 30,然后 30 x 10 最后得到的应该是 300 才对。

怎么会算出来是 210 的呢?

实际上在编译时仅仅是做了文本替换,相当于最后的代码是:

printf("%d", a + b * a);

最后结果就是 210 了。

当然任何地方都可以使用宏替换,包括类型,反正最后都会变成被替换的内容:

#define lbwnb long

int main() {
    lbwnb a = 10L;
}

当然除了这种简单的替换之外还可以添加参数,就像函数那样:

#include <stdio.h>

#define MUL(x) x * x

int main() {
    printf("%d", MUL(9));
}
81

虽然这里搞得像函数一样,但是最后还是会被替换为 x * x,而这个 x 就是填写的参数,所以最后会变成 9 * 9 替换上去,程序运行出来的结果就是 81 了。

直接调函数肯定也是没问题的,反正就纯替换:

#include <stdio.h>

#define bb(i) printf("我是宏替换的:%d", i);

int main() {
    bb(666);
}
我是宏替换的:666

那要是想在字符串里面加一个宏定义中的参数呢?

#include <stdio.h>

// 使用#直接在字符串中进行宏替换,否则默认情况下会被当做一个字符
#define bb(str) printf("我是宏替换的:" #str " <");  

int main() {
    bb("替换成功");
}
我是宏替换的:"替换成功" <

当然还可以替换宏中的部分:

// ##会使用参数进行拼接
#define TEST(n) x##n  

int main() {
    // 这里传入1,那么实际上就是被替换为x1
    int TEST(1) = 10;  
    // 所以上面其实是int x1 = 10
    x1 = 20;           
}

宏既然可以定义出来,那么也可以取消定义,可以使用#undef来取消已有的宏定义:

可以看到在使用#undef之后,直接不认识了。

当然除了我们自己可以去定义之外,系统也为我们提供了一些预定义的宏:

宏名称含义
_ _ DATE _ _当前的日期,格式为类似 Jun 27 2023 的字符串
_ _ TIME _ _当前的时间,格式为类似 10:23:12 的字符串
_ _ FILE _ _当前源代码文件的名称(含路径)的字符串
_ _ LINE _ _当前所处的行号是多少就替换为多少,整数

这里只列出了一部分。


环境:

  • GCC 11.4.0
  • VSCode 1.93.1
数据治理是确保数据准确性、可靠性、安全性、可用性和完整性的体系和框架。它定义了组织内部如何使用、存储、保护和共享数据的规则和流程。数据治理的重要性随着数字化转型的加速而日益凸显,它能够提高决策效率、增强业务竞争力、降低风险,并促进业务创新。有效的数据治理体系可以确保数据在采集、存储、处理、共享和保护等环节的合规性和有效性。 数据质量管理是数据治理中的关键环节,它涉及数据质量评估、数据清洗、标准化和监控。高质量的数据能够提升业务决策的准确性,优化业务流程,并挖掘潜在的商业价值。随着大数据和人工智能技术的发展,数据质量管理在确保数据准确性和可靠性方面的作用愈发重要。企业需要建立完善的数据质量管理和校验机制,并通过数据清洗和标准化提高数据质量。 数据安全与隐私保护是数据治理中的另一个重要领域。随着数据量的快速增长和互联网技术的迅速发展,数据安全与隐私保护面临前所未有的挑战。企业需要加强数据安全与隐私保护的法律法规和技术手段,采用数据加密、脱敏和备份恢复等技术手段,以及加强培训和教育,提高安全意识和技能水平。 数据流程管理与监控是确保数据质量、提高数据利用率、保护数据安全的重要环节。有效的数据流程管理可以确保数据流程的合规性和高效性,而实时监控则有助于及时发现并解决潜在问题。企业需要设计合理的数据流程架构,制定详细的数据管理流程规范,并运用数据审计和可视化技术手段进行监控。 数据资产管理是将数据视为组织的重要资产,通过有效的管理和利用,为组织带来经济价值。数据资产管理涵盖数据的整个生命周期,包括数据的创建、存储、处理、共享、使用和保护。它面临的挑战包括数据量的快速增长、数据类型的多样化和数据更新的迅速性。组织需要建立完善的数据管理体系,提高数据处理和分析能力,以应对这些挑战。同时,数据资产的分类与评估、共享与使用规范也是数据资产管理的重要组成部分,需要制定合理的标准和规范,确保数据共享的安全性和隐私保护,以及建立合理的利益分配和权益保障机制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天航星

感谢你的鼓励和认可

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值