当前位置: 首页 > ai >正文

嵌入式开发学习日志Day13

第九章 预处理命令

前面加“#”的都为预处理命令;

预处理命令是无脑的文本替换;

一、宏定义

1、不带参数的宏定义

一般形式为:

                #define  标识符  字符串

(谷歌规定):所有的宏名均大写,便于区分;

    写宏时,左右两边加括号,防止出错; 

    宏可以嵌套使用;

 【gcc - E】————只做预处理,不编译;

【-omain.i】————输出main.i文件,预处理的结果;

 2、带参数的宏定义(带参宏)

  一般定义形式:

        #define  宏名 (参数表)字符串

eg:define ADD(a,b)    (a)+(b)

 调用:printf("%d\n",ADD(3,4));

注意:带参宏的参数不用加数据类型;

eg:用带参宏计算三角形的面积;

程序:

 二、“文件包含”处理

        include命令的使用;     

eg:#include <stdio.h>

文件名可以写在<    >或者“  ”中进行表示;

文件名内容可以由绝对路径和相对路径构成;

        <   >和“  ”在用绝对路径时用法相同;

        在表示相对路径时:<  >会在//usr/include/下去寻找;

                                        “    ”会在当前的main.c下去寻找;

三、条件编译

 1.若表达式为真,可运行;为假,注释(非零即为真)

#if  (表达式)
#endif

2.用于调试

#ifdef 标识符
//指一个宏,若被定义执行程序段1,不执行程序段2;未被定义,则相反程序段1
#else程序段2
#endif

3.用于解决对同一头文件可能多次包含,导致被重新定义引发编译错误

#ifndef程序段1
#else程序段2
#endif


 在使用时,每个头文件都参照下面格式去书写

#ifndef    FUNC_H
#define FUNC_H
内容
...
...
...#endif

第十章  指针

一、地址和指针的概念

        指针是用来装地址的数据类型;

定义指针变量的一般形式:

基类型   *指针变量名   eg:int *p;

基类型————表示指针中装什么类型的地址;

int i = 10;
int *p;
p = &i;

或者可以

int i = 10;
int *p = &i;

成为指针变量P的指向变量;

注意:

*p 就是  i  本身,————指针的间接访问;

int *p中————*时类型说明符;

*p 的数据类型就是基类型;

 在64位系统下,所有的地址都占8个字节;

 在32位系统下,所有的地址都占4个字节;

 当&和*放在一起时,可以被抵消,但是必须注意*后必须为指针参数;

指针运算要求其操作数必须是指针;

 

void swep (int *a,int *b);
int *t;
*t = *a;

其中*t被称为野指针;

野指针:指针指向的位置是不可知的;

指针运算三大步:

  1. 根据指针变量的值去内存中定位
  2. 从定位处开始向后偏移sizeof(基类型)个字节
  3. 将偏移后的那部分内存空间当作一个基类型变量来看

练习:

(1)计算三个数的和;

程序:

 (2)找出三个数中的最大值和最小值;

 程序:

 (3)交换连个变量的值;

程序:

 

http://www.xdnf.cn/news/3986.html

相关文章:

  • window 系统 使用ollama + docker + deepseek R1+ Dify 搭建本地个人助手
  • C++笔记之接口`Interface`
  • 恶心的win11更新DIY 设置win11更新为100年
  • 《赤色世界》彩蛋
  • 数据封装的过程
  • 分析atoi(),atol()和atof()三个函数的功能
  • 【今日三题】小红的口罩(小堆) / 春游(模拟) / 数位染色(01背包)
  • 【Bootstrap V4系列】学习入门教程之 组件-卡片(Card)
  • Linux怎么更新已安装的软件
  • sudo useradd -r -s /bin/false -U -m -d /usr/share/ollama ollama解释这行代码的含义
  • 1.openharmony环境搭建
  • osquery在网络安全入侵场景中的应用实战(二)
  • 关于毕业论文,查重,AIGC
  • QT6 源(78):阅读与注释滑动条 QSlider 的源码,其是基类QAbstractSlider 的子类,及其刻度线的属性举例
  • 算法热题——等价多米诺骨牌对的数量
  • 【实战教程】React Native项目集成Google ML Kit实现离线水表OCR识别
  • 【云备份】服务端业务处理模块设计与实现
  • 2025-04-18-文本相似度-菜鸟
  • LLM(17):计算所有输入 token 的注意力权重
  • 【C语言练习】023. 编写条件编译代码
  • 高速互联技术:NVLink和PCIe有什么区别
  • 信息系统项目管理师-软考高级(软考高项)​​​​​​​​​​​2025最新(七)
  • 深度学习系统学习系列【4】之反向传播(BP)四个基本公式推导
  • Jogging(ABC249-A-竞赛题解)
  • 【QT】QT安装
  • ​亚马逊云服务器技术全景解析:从基础架构到行业赋能​
  • 42. 接雨水(相向双指针/前后缀分解),一篇文章讲透彻
  • 从代码学习深度学习 - 目标检测前置知识(二) PyTorch版
  • uniapp 云开发全集 云开发的概念
  • 什么是原码、反码与补码?