【C语言】总结C/C++中的预处理 | 关键字define | 宏定义 | 带参宏

最新C/C++经典面试题(50道附答案) 今天分享给大家的是比较基础全面的C/C++经典面试题,提供给有需要的同学们学习! 阅读详情

文件操作,预处理

一. 什么是预处理

代码执行之前的事情,命令以#开头

二. 常见的预处理

头文件

三. #define

是C语言的宏定义,本质是替换,会在预处理阶段对程序中所有出现的"宏名"的地方进行替换

一 宏替换
1.定义

#define 宏名 内容

#define PI 3.14159 //定义PI为3.14159 相当于给常量起名
#define NUM 3+1
int main(){
    int n = NUM * NUM;      //拆解 : 3 + 1 * 3 + 1 
    printf("n = %d\n", n);  //结果 : 7
    return 0;
}
二 带参宏
  1. 定义

#define 宏名(形参列表) 内容

#define ADD(a,b) a+b
  1. 举例
#include <stdio.h>

// #define 宏名(形参列表) 内容
#define ADD(a,b) a+b
#define ADD1(a,b) (a+b)
// 注意:没有参数类型 没有返回值 本质:替换
int main()
{                                       // 拆解: n = a + b ;
int n = ADD(1,2);                       // 拆解: 1 + 2
printf("n = %d\n", n);                  // 结果: 3
n = ADD(1, ADD(5, 6))*ADD(3, 4);        // 拆解: 1 + 5 + 6 * 3 + 4
printf("n = %d\n", n);                  // 结果: 28
n = ADD1(1, ADD1(5, 6))*ADD1(3, 4);     // 拆解: ( 1 + (5 + 6) ) * (3 + 4)
printf("n = %d\n", n);                  // 结果: 84
double d = ADD(1.223, 2.456);           // 拆解: 1.223 + 2.456
printf("d = %lf\n", d);                 // 结果: 3.679000
return 0;
}

四 预编译条件

一 #ifdef 宏名
语法:
#ifdef 宏名
    代码块;
#endif
规则:

根据宏名是否定义,如果定义了,就会执行代码块直到endif,否则不执行代码块

举例:
#include <stdio.h>

#define def_1 1;            // 宏定义 def_1

int main()
{
    #ifdef AAA            // 判断 def_1 宏名以被定义 执行代码块内容
    printf("宏名以被定义\n");
    #endif // AAA         // 结束宏判断
    
    return 0;
}

#include<stdio.h>

#define def_1 1                   // 宏定义 def_1

int main() {
                                 
#ifdef def_1                      // 判断是否定义宏名 def_1
	printf("以定义宏名 def_1");     // 结果
#else
	printf("未定义宏名 def_1");
#endif
	return 0;
}
二 #ifndef 宏名
语法
#ifndef 宏名
    代码块;
#else
    代码块;
#endif
规则: ( 与 ifdef 类似且相反 )

根据宏名是否定义,如果没有定义,就会执行相对代码直到endif,否则不执行代码块

举例:
#include<stdio.h>

#define def_1 1                    // 宏定义 def_1

int main() {

#ifndef def_1                      // 判断是否定义宏名 def_1
	printf("未定义宏名 def_1");
#else
	printf("以定义宏名 def_1");      // 结果
#endif
	return 0;
}
常用事件:

令某代码永远只执行一次:

#ifndef def_1
#define def_1
     //代码块
#endif
三 #if 表达式
语法:
#if(表达式)
// 代码块1;
#else
// 代码块2;
#endif
规则:

如果表达式为真 , 执行代码块 1 ,否则执行代码块 2.

举例:
#include <stdio.h>

int main() {
    
#if(1)
	printf("yes\n");
#else
	printf("no\n");
#endif
    
    return 0;
}
C语言与C++ 笔记 用恰当的工具做恰如其分的工作,指针可以毫无约束的操作内存中的任何东西,功能十分强大,但是也很危险,所以可以在恰当的时机使用引用,当你需要指向某个东西,而且一定专一,绝不会让其指向其它东西,例如有些函数参数为了避免拷贝可以使用引用,或者实现一个操作符而其语法需求无法由指针达成,例如vec[3]=3,可以使用引用,其它任何时候,都要使用指针。重载了*与->,并且在这个类中实现了动态资源的释放,因为是一个类,当超出类的实例对象的作用域时,会自动调用析构函数,从而达到指针和动态资源的自动管理的效果。 阅读详情

相关推荐

从零开始:如何用Python建立你的第一个人工智能模型

在这篇文章中,我们将介绍如何从零开始使用Python建立你的第一个人工智能模型。无论你是刚接触编程的新手,还是有经验的开发者想进一步探索人工智能领域,这篇文章都将为你提供清晰、详细的指南。我们将一步步探索数据预处理、模型建立、训练和测试的过程,以及如何解读模型的结果。

Allen1862105的博客 4万+

C语言typedef用法详解

C语言typedef用法详解前言方法与结构的联合使用与#define的区别typedef的复杂声明 前言 typedef(type define)是c语言的关键字,它的作用是为一种数据类型定义一个新名字。一般用来简化类型定义。 方法 typedef声明的用法和普通声明的用法基本相同,只是把typedef放在声明的前面。 不使用typedef char *ptr_to_char; 使用typed...

yuan 4711

K8s私有仓库拉取镜像报错解决:x509 certificate signed by unknown authority

在Kubernetes环境中使用自签名证书的私有Harbor镜像仓库时,常会遇到证书验证失败的问题。本文将详细讲解如何解决这个常见的证书问题。Kubernetes版本:1.28.2容器运行时:containerd 1.6.20私有仓库:Harbor(使用自签名证书)(超简单搭建私有仓库Harbor-亲测无坑解决K8s私有仓库证书问题的关键在于正确配置容器运行时(本例中是containerd)信任私有仓库的证书。

lzz的博客 2142

带参数的宏定义——#define

带参宏定义的一般形式为: # define 宏定义名(参数表) 字符串;举例n1 : n2;return m;} // 这个用带参数的宏定义替换 # defin MAX(n , m) n > m?return m;} // 这个用带参数的宏定义替换 # defin MAX(n , m) n > m?return m;} // 这个用带参数的宏定义替换 # defin MAX(n , m) n > m?

mankeywang的博客 816

手把手教你如何修改YOLO11的模型结构(以CBAM和可变性卷积为例)

YOLO11修改模型结构

2401_86807530的博客 1万+

从STM32F411到华大HC32F460:一个真实项目移植的踩坑与填坑全记录

本文详细记录了从STM32F411移植到华大HC32F460芯片的全过程,包括开发环境搭建、时钟树配置、中断处理、外设驱动、看门狗陷阱、Flash操作和低功耗设计等关键坑点及解决方案。特别针对HC32F460的200MHz主频、双PLL架构和HSRUN模式等特性进行了深入分析,为工程师提供实用的移植指南,帮助节省大量调试时间。

weixin_33691817的博客 420

C++ #define(宏定义)的使用

C++ 宏定义 #define命令是C++语言中的一个宏定义命令,它用来将一个标识符定义为一个字符串,该标识符被称为宏名,被定义的字符串称为替换文本。 宏定义的一般形式 #define <宏名>(<参数表>) <宏体> <宏名>是一个标识符, <参数表>参数是可选的,可以写,也可以不写,也可以是多个,当有多个参数的时候,每个参数之间用逗号分隔。 <宏体> 是被替换用的字符串,宏体中的字符串是由参数表中的各个参数组成的表达式.

小牧在一直在学习,在前进的道路上大家一起学习,进步。 3150

避坑指南:PyTorch ConvLSTM参数配置的那些坑(hidden_dim/kernel_size/num_layers详解)

本文深度解析PyTorch ConvLSTM中hidden_dim、kernel_size和num_layers三大核心参数的配置技巧,提供实战指南和性能优化建议。通过实验数据揭示参数组合的内在规律,帮助开发者避免常见配置陷阱,提升时空序列建模效果。特别针对视频预测、气象预报等应用场景,给出黄金参数组合方案和调试技巧。

vv45678的博客 703

C语言带参数宏定义

C语言允许宏带有参数。在宏定义中的参数称为形式参数,在宏调用中的参数称为实际参数,这点和函数有些类似。 对带参数的宏,在调用中,不仅要宏展开,而且要用实参去代换形参。 带参宏定义的一般形式为: #define 宏名(形参列表) 字符串 在字符串中含有各个形参。 带参宏调用的一般形式为: 宏名(实参列表); 例如: #define M(y) y*y+3*y //

ching的博客 1543

python自动交易 缠论_缠论自动交易系统实现了

一、缘起:缠中说禅的伟大,我想你只要上网搜索一下就知道了,他的才气不用我说,我只想说说他的《教你炒股票》系列文章,108篇文章,将他的股票操盘秘籍全部公开给广大的股友了,更有缠友将其理论写成公式,在网上也是广为流传,深受广大缠友们的喜爱。我也是缠中说禅的忠实崇拜者之一,从2008年开始每天都使用缠论来看盘,特别想将缠论写成交易系统,让计算加来帮助我们自动交易,从而减轻我们盯盘的辛劳,可是苦于没有好...

weixin_39970689的博客 4642

STM32入门教程:人脸识别

STM32CubeMX配置 打开STM32CubeMX,创建一个新的工程,并选择你使用的STM32系列和具体型号。根据摄像头模块的规格,将摄像头的输出引脚连接到相应的STM32引脚上。人脸识别是一种非常常见的人工智能应用,它可以通过摄像头捕捉到的图像,识别出图像中的人脸并进行相关的分析和处理。在本教程中,我们将使用STM32开发板和相关传感器,通过指导你搭建一个基于STM32的简单人脸识别系统,并编写相应的代码来实现该功能。另外,为了达到更好的人脸识别效果,可能需要使用更高性能的处理器和更复杂的算法。

吃不胖. 374

C语言初阶(五) -关键字、#define

关键字 #define 1. 常见关键字 1.1 表格 char 字符型 auto default int 整型 extern break 跳出所在的循环或语句块 float 单精度浮点型 if continue 跳过本次循环 double 双精度浮点型 else static 修饰变量或函数使之成为静态 short 短整型 while rigister long 长整型 do typedef 为类型重命名 long long 更长的整型 for ..

分享简单技术,记录点滴成长 622

[RK3568 Android11] 开发之蓝牙(AP6275S)

前言 蓝牙是一种支持设备短距离通信(一般10m内)的无线电技术,能在包括移动电话、PDA、无线耳机、笔记本电脑、相关外设等众多设备之间进行无线信息交换。利用“蓝牙”技术,能够有效地简化移动通信终端设备之间的通信,也能够成功地简化设备与因特网Internet之间的通信,从而数据传输变得更加迅速高效,为无线通信拓宽道路。 接下来是在RK3568上调试AP6275S模块蓝牙部分: 一、设备树dts配置 根据硬件原理图,找到对应的控制引脚,配置好dts: ...

~未来可期~ 4075

define与const关键字的多种用法

这将创建一个名为 PI 的宏,它将在程序中代表 3.14159265。这可以用于在编译时控制是否包含调试代码。例如可以在代码中使用 #ifdef DEBUG 来包含调试语句。int main()//定义常变量使用此语句则报错:assignment of read-only variable 'Number'//输出10return 0;在这个例子中,Number被声明为一个常变量,其值在声明后不可被修改。这可以用于创建不可变的数值或对象。int x = 5;这里,const int*

朝花夕拾 1万+

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

C语言 define 定义函数 - C语言零基础入门教程

目录 一.define 简介 二.define 定义函数 1.define 定义不带参数的函数 2.define 定义带参数的函数 三.define 定义函数陷阱 1.define 函数陷阱一 2.define 函数陷阱一解决办法 3.define 函数陷阱二 4.define 函数陷阱二解决办法 四.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 一.define 简介 C 语言中,除了可以用 #define 定义一个标识符来表

猿说编程 3万+

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

【C/C++内功心法】剖析预处理过程,详解预处理指令,提升C/C++内功

今天我将会为大家详细讲解预处理指令。虽然本文章读完后不能让大家代码写得飞起,但是预处理这个过程是十分重要的,其中的很多指令也是经常被考到,你了解了它,它将会大幅提升你的C/C++内功,让你学编程更加的容易。

这是一个非常有意思的博主 4686

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

C/C++中常见的#if、if、#ifdef、#if define等区别

条件编译是C语言中预处理部分的内容,它是编译器编译代码时最先处理的部分,条件编译里面有判断语句,比如 #if 、#else 、#elif 及 #endif它的意思是如果宏条件符合,编译器就编译这段代码,否则,编译器就忽略这段代码而不编译,如 而 if 语句则不然,if 是 C 语言中的关键字,它根据表达式的计算结果来觉定执行那个语句,它里面的每个分支都编译了的, 如 作为一个编译“开关”(常用来注释代码),比如: 假如编译时,确实满足条件(结果非0时),则生成的程序文件(.exe文件)中不会有执

modi000的博客 7171

C++ Typedef和define的用法

Define 定义: define,宏定义,C语言中预处理命令一种。分为无参宏定义和带参宏定义。 无参宏定义的一般形式为:#define 宏名字符串; 带参宏定义的一般形式为:#define 宏名(参数表)字符串。 #define 命令是 C 语言中的一个宏定义命令 ,它用来将一个标识符定义为一个字符串 , 该标识符被称为宏名, 被定义的字符串称为替换文本。[1]该命令有两种格式...

qq_39025293的博客 772

C语言要点总结-关键字&保留字总结

目录 6关键字总结: 6.1define(宏定义) 6.2const(恒定) 6.3 sizeof 6.4static(静态) 6.4.1static修饰局部变量 6.4.2static修饰全局变量 6.4.3static修饰函数 6.4.4在C++等面对对象编程语言中 6.5 auto(自动变量) 6.6 4个与储存类型相关的关键字总结 6.6.1.auto 6.6.2...

qq_41605114的博客 2002

c语言define(c语言define什么意思)

define在C语言是什么意思,有什么作用 有的时候为了程序的通用性,可以使用#define预处理宏定义命令,它的具体作用,就是方便程序段的定义和修改。 举个例子吧,如果说你在做一个项目,这个项目的代码很长,有5000多行,而且基本上裏面的同一个常量N就占了3000多行,如果说今后你要是想对这个常量N的值进行修改,如果...

计算机毕业论文源码,学生个人网页制作html源码。贴近用户做网络推广和互联网优化。 1310

C++ typedef 和define的区别

文章目录1 typedef 的用法(1) 基本类型(2) 结构体的使用**3) 混合使用**2 define 的用法3 typedef 和 define 的区别参考资料 注:转载请标明原文出处链接:https://xiongyiming.blog.youkuaiyun.com/article/details/101542039 1 typedef 的用法 在C/C++语言中,typedef常用来定义一个标...

TechArtisan6的博客 750

Linux C语言:#define和typedef

include是一个预处理指令,预处理这个动作发生在编译之前:#include 的作用是,在预处理时,将文件中的全部文本内容复制粘贴到#include所在的位置宏用 #define 声明,const 常量用 const + 数据类型 声明。宏最后没用分号,const 常量声明需要用分号表示语句结束。宏不需要用等号赋值,cosnt 常量需要用等号赋值。宏定义可以通过#undef来使之前的宏定义失效const常量定义后将在定义域内永久有效void f1()

Liu1013216383的博客 1527

【C/C++面试题】const、define、extern、typedef、volatile、static的定义与区别

文章目录constdefineexterntypedefstaticvolatileconst与#define相比,有何优点?typedef和define有什么区别C 语言的关键字 static 和 C++ 的关键字 static 有什么区别一个指针可以是 volatile吗?const和volatile可以同时修饰一个变量吗? const const用来定义一个只读的变量或对象。 主要优点:便于...

zhong_senvi的博客 710

【C语言】宏定义define 和类型重命名typedef

  C语言里面有两个不容易区分的语法概念,宏定义define 和类型重命名typedef。下面我们来谈一下两者之间的差异。   1.类型重命名typedef: 关键字typedef提供了一种为已定义好的数据类型创建别名的机制,为了创建更简短的类型名,通常使用typeddef来为结构体起名字,这样就不需要结构体标记了。使用typedef可以提高程序的可移植性,可读性和可维护性。 2.预处理命令...

JoJoJo1234的博客 3526

Linux C语言 25-预处理操作

C语言编译过程、预处理、多行宏定义、通过宏判断操作系统、通过宏判断VC版本 相关C库函数:main,printf

Tianwx的博客 1158

C语言 typedef 和 define 区别 - C语言零基础入门教程

C语言typedef它并没有产生新的类型;//等价 int a = 10;//声明了一个返回 bool 类型并带有两个(int和double)形参的函数的指针类型FuncPointer//声明了一个FuncPointer类型的函数指针对象pFunc在C语言中,如果定义结构体的时候没有声明typedef,声明结构体变量时就必须用struct来声明,否则会报错;//不使用typedefint age;//C语言中必须添加struct,C++可以不添加struct//使用typedef。

pingguocu3的博客 758
上一篇: 【STL】binart_search、lower_bound、upper_bound详解 | STL二分算法 | STL底层源码解析
下一篇: 【算法竞赛】单调队列 | 找几个连续数中最小的数字 | 动态规划单调性优化 | Monotone Priority Queue
MuShan-bit
博客等级 码龄5年 538粉丝 30原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

MuShan-bit

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值