宏定义———C语言

news2024/9/27 21:23:10

*符号代表全部的意思*.i代表的是全部的点i文件

宏定义 :

1.定义:

  • #define   宏名+ 常量
  • 功能:宏名代替常量,宏名要求全大写且见名知义

 2.示例:

#include <stdio.h>
#define PI 3.14
#define Q 4
#define P Q+Q

int main(){
    float r =0;
    printf("input r:");
    scanf("%f",&r);
    float area = PI*r*r;
    printf("area = %.2f\n",area);//3.14*2*2
    printf("P*P=%d",P*P);//4+4*4+4=24原样替换
    return 0;
}

fbac511079714154ab4552a499084d9a.png

  • 编译器会将宏原样替换:
  • gcc -E define——01.c -o define_01.i(预处理时进行原样替换)
    vi define_01.i

3.宏函数

语法:#define Clii(x)  (x*x)#define 宏函数名(参数1,参数2)表达式

#include <stdio.h>
#define M 10
#define CALC(x)   (x * x)//防止原样替换
int main(){
    printf("M = %d\n",M);
    printf("Result = %d\n", CALC(M + M));
    return 0;
}

4.嵌入式开发常用宏操作 do...while(0)

定义宏函数:

#include <stdio.h>
void print_demo1(){
    printf("demo first\n");
}
void print_demo2(){
    printf("demo second\n");
}
void print_demo3(){
    printf("demo second\n");
}
#define   TEST()     print_demo1();print_demo2(); print_demo3();
int main(){
    TEST(); //单独使用无任何副作用;
    return 0;
}

在添加使用:各种逻辑语句时容易出现问题

嵌入式常用:do{x*x;}while(0)执行一次(使用过后没有数值的返回),若想多行需要加/进行拼接

05a4e4a243d0489ca9d9e2a7b6439736.png

if   else使用时将{ }加上

e852733d4f894222a638f1fc8b551c05.png

当使用多条函数调用时:加大括号或使用do while语句do while 不会提供返回值只会执行函数

5.字符串化运算符#

将传入的值转化为字符串

eg:x = 4+2 #define CALC(x)printf(#x"=%d\n",x)

#include <stdio.h>
#define CALA(m) printf(#m"=%d\n",m);
#define N 10
#define SS(N) printf(#N);//不需要""即可将数字或其他的转化为字符串
int main(){
    CALA(3+4);
    SS(N);
    return 0;
}

 6bcfba0957be40209c626a650ed348ec.png

6.不定参数宏

_VA_ARGS_:表示可变参数列表,传入的参数都放置于_VA_ARGS_中

#include <stdio.h>
#define LOG(...)    printf(__VA_ARGS__)
#define LOGSTR(fm,...)  printf(fm,__VA_ARGS__);
int main(){
    LOG("This Time is %d o'clock\n",12);
    LOG("This Time is %d:%d:%d\n",11,9,23);
    LOGSTR("data = %d%s\n",100,"RMB");
    return 0;
}

 

7ff00c9b278d4b10b9d69d4dfe2341fd.png

条件编译

1.命令行参数:

int main(int argc,char*argv[]) 计算命令行输入值的个数argc 参数的个数 argv 参数内容(都是以字符串的形式出现)

#include <stdio.h>

int main(int argc,const char* args[]){
    printf("argc=%d\n",argc);
    printf("args[0]=%s\n",args[0]);
    printf("args[1]=%s\n",args[1]);
    return 0;
}

03d9185ea12749efb842ab3d91ac4d60.png

2.新代码注释(条件编译)

 #if 宏名

  代码块

#endif

宏名为真,则编译代码

 #if 宏名

   代码块1

#else

   代码块2

#endif

如果宏名为真,则编译代码块1,否则编译代码块2

  • 生产环境:不建议完全关闭日志,至少保留错误日志并定期轮转。可以考虑优化日志的存储方式和级别。
  • 开发环境:应该打开详细的日志输出,以帮助排查问题。合理配置日志级别,避免开发过程中不输出日志而导致问题难以定位。

 多文件编程

 

1.extern关键字

功能:声明变量或函数是来源于其它文件的全局变量或全局函数

 eg:

#include <stdio.h>
extern int global_variable;//extern大多用于头文件
extern void show();
int main(){
        printf("global_variable=%d\n",global_variable);
        show();
        return 0;
}

2.多文件编程框架

1. 头文件 xxx.h

3fb2db93d3f44c738514c84e31e0a78e.png

2. 功能文件 :

xxx.c主要存放用户编写的逻辑代码函数,不包括main函数

3. 组合逻辑的文件 :

main.c用于组合功能文件提供的函数接口

3.添加#ifndef的必要性

  • #ifndef HEADER_NAME_H
  • #define HEADER_NAME_H
  • // 头文件内容,如函数声明、宏定义、结构体声明等
  • #endif // HEADER_NAME_H

感谢诸君将我的文章看完,希望我的文章能对各位有所帮助 

 0c68a8b8227f4bdcb776b848e10e4597.png

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2052744.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Ubuntu系统+宝塔面板部署Frp内网穿透服务

一、搭建目的 上次在局域网中搭建了自己的个人网盘之后&#xff0c;上传文件、照片都很方便&#xff0c;但是只能限制在内网中访问&#xff01;所以这次再搭建一个内网穿透服务器&#xff0c;这样不管在哪里都能访问到家里的云盘&#xff01; 二、内网穿透Frp是什么&#xff1…

连接一切:Web3如何推动物联网的发展

物联网面临的挑战 物联网&#xff08;IoT&#xff09;作为现代科技的重要组成部分&#xff0c;通过将各种智能设备和系统互联&#xff0c;正在以惊人的速度改变我们的生活方式。从智能家居到智慧城市&#xff0c;物联网的应用无处不在。然而&#xff0c;随着设备数量的急剧增加…

华为---端口隔离简介和示例配置

目录 1. 端口隔离概念 2. 端口隔离作用 3. 端口隔离优点 4. 端口隔离缺点 5. 端口隔离的方法和应用场景 6. 端口隔离配置 6.1 端口隔离相关配置命令 6.2 端口隔离配置思路 7. 示例配置 7.1 示例场景 7.2 网络拓扑图 7.3 基本配置 7.4端口隔离配置与验证 7.4.1 双…

初识--树(1)

下面就是这篇博客要讲的内容 树 二叉树堆 树概念及结构二叉树的概念及结构二叉树的实现堆的概念及运用 这篇博客主要以二叉树为主要内容。 1、树的概念及结构 1.1树的概念&#xff1a; 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限…

C语言 - 构造类型

构造类型&#xff1a; 数据类型的分类&#xff1a; 基本类型&#xff1a;整数型&#xff1a;短整型&#xff08;short&#xff09;、整型&#xff08;int&#xff09;、长整型&#xff08;long&#xff09;、长长整型&#xff08;long long&#xff09; 浮点型&#xff1a;单…

Java | Leetcode Java题解之第336题回文对

题目&#xff1a; 题解&#xff1a; class Solution {public List<List<Integer>> palindromePairs(String[] words) {List<List<Integer>> ans new ArrayList<>();int n words.length;for (int i 0; i < n; i) {for (int j 0; j < n…

让科技党狂喜的电动车什么样,新日凯迪拉氮,你值得拥有!

这些年电动车企为了创新可以说“八仙过海&#xff0c;各显神通”&#xff0c;有的深挖智能技术开辟新赛道&#xff0c;有的狂卷性能卷出新场景。然而&#xff0c;真正触动消费者心弦的是&#xff1a;如何实实在在地提升骑行体验。正是洞察了这一核心需求&#xff0c;新日电动车…

如何进行屏幕录制?有哪些免费的录屏软件推荐?

如何进行屏幕录制&#xff1f;有哪些免费的录屏软件推荐&#xff1f; 对于内容创作者、教育工作者和游戏玩家来说。精通屏幕录制技术已成为一项不可或缺的技能&#xff01;本文将深入探讨如何使用市面上的顶级屏幕录制软件&#xff0c;例如嗨格式录屏大师和OBS Studio&#xff…

hyper-v安装window10操作系统

Hyper-V是微软的一款虚拟化产品&#xff0c;是微软第一个采用类似Vmware ESXi和Citrix Xen的基于hypervisor的技术。 目标&#xff1a;在window10的物理机上基于hyper-v运行虚拟window10。 准备条件 准备好window10操作系统&#xff0c;iso、wim、esd等都行&#xff0c;我这…

侧向开敞式通风天窗的设计特点和优势

一、特点 1、侧向开启&#xff1a;与传统的顶开型窗户相比&#xff0c;侧向开敞式通风天窗采用侧向开启的方式&#xff0c;这种设计不仅为室内提供了更大的通风面积&#xff0c;还使得空气流动更加顺畅。 2、防雨功能&#xff1a;设计时考虑防雨需求&#xff0c;能够在下雨时保…

如何在C++ QT 程序中集成cef3浏览器组件去显示网页?

目录 1、问题描述 2、为什么选择cef3浏览器组件 3、cef3组件的介绍与下载 4、将cef3组件封装成sdk 5、如何使用cef3组件加载web页面 5.1、了解CefApp与CefClient 5.2、初始化与消息循环 5.3、如何创建浏览器 5.4、重载CefClient类 6、在qt客户端集成cef组件 7、最后…

VS2022上面运行QT程序

需求&#xff1a;之前是在QT6.6上面运行&#xff0c;现在想试一下VS2022&#xff1a; 操作步骤&#xff1a; 第一步&#xff1a; 在QT的配置软件中安装MSVC 第二步&#xff1a;配置VS 第三步&#xff1a;在VS上面安装QT插件&#xff0c;但是在QT上面安装速度很慢&#xff0c;…

Leetcode面试经典150题-15.三数之和

解法都在代码里&#xff0c;不懂就留言或者私信 class Solution {/**每次做这个题都想着这事最后一次了&#xff0c;但是确实很高频&#xff0c;还是多练练吧基本思路&#xff1a;先把原来的数组按照从小到大的顺序排列&#xff0c;然后我们从头开始确定第一个数&#xff0c;然…

STM32CubeMX stm32不限长度使用DMA收发串口数据

STM32CubeMX 配置 代码 stm32h7xx_it.c /*** brief This function handles UART7 global interrupt.*/ void UART7_IRQHandler(void) {/* USER CODE BEGIN UART7_IRQn 0 */if (UART7 huart7.Instance) // 判断是否是空闲中断{if (__HAL_UART_GET_FLAG(&huart7, UART_FLA…

数据导入导出(EasyExcel)框架入门指南

写在前面 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站 文章目录 EasyExcel 框架概述依赖APIExcel 实体类注解写 Excel概念介绍写 Excel 通用参数WriteWorkbookWriteSheetWriteTable 代码…

【Qt】常用控件QRadioButton

常用控件QRadioButton QRadioButton是单选按钮&#xff0c;可以在多个选项中选择一个。 作为QAbstractButton和QWidget的子类&#xff0c;其属性和用法&#xff0c;对于QRadioButton同样适用。 属性说明 checkable 是否能选中 checked 是否已经被选中. checkable 是 checked…

平安养老险宿州中支开展消防培训及逃生演练活动

近日&#xff0c;平安养老保险股份有限公司&#xff08;以下简称“平安养老险”&#xff09;宿州中心支公司邀请助安消防公司袁教官为公司员工开展消防安全知识培训。 培训教官结合近年来火灾典型案例&#xff0c;对火灾的危害、火灾的预防措施、灭火器材的使用进行深入浅出的…

centos 常用软件的安装和使用

redis 安装 0、下载、解压那些的我在这儿就不说了&#xff0c;有不懂的&#xff0c;看我之前写的博客。 1、在安装 redis 之前&#xff0c;我们得先安装它的依赖 yum install gcc-c 2、假设我下载放进的目录是 /usr/local/src/ &#xff0c; 并且 我的版本为 redis-6.0.8 …

数字化转型对金融服务业的影响

数字化转型正在塑造每个行业&#xff0c;从快速消费品到金融&#xff0c;每个行业都受到新兴技术的影响。 那么&#xff0c;数字化转型在金融服务中扮演什么角色&#xff1f;这对招聘前景有何影响&#xff1f; 我们探讨了数字化转型对该行业的影响、其对招聘策略的影响、数据…

适合大学生的耳机排行有哪些?四大TOP级性价比蓝牙耳机合集

大学生生活多彩多姿&#xff0c;耳机也成为了他们日常生活、学习和娱乐中不可或缺的配件。但面对市面上琳琅满目的耳机品牌和型号&#xff0c;选择性价比高且适合自身需求的耳机变得尤为重要&#xff0c;那么适合大学生的耳机排行有哪些&#xff1f;今天我就为大家精选了四大TO…