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

ANSI C 和 C89/C90

在嵌入式开发中提到的 ANSI 通常是指 ANSI C 标准,而 C89 是该标准的另一个名称。以下是详细的解释和两者的关系:


1. ANSI C 是什么?

  • ANSI(American National Standards Institute,美国国家标准协会)在 1989 年发布了第一个官方的 C 语言标准,称为 ANSI C
  • 这一标准旨在统一 C 语言的语法、语义和核心库,解决当时不同编译器(如 GCC、Borland C 等)之间的兼容性问题。

2. ANSI C 与 C89 的关系

  • ANSI C 和 C89 是同一标准的两个名称
    • C89:ANSI 在 1989 年完成标准化工作后,ISO(国际标准化组织)于 1990 年采纳了这一标准,正式命名为 ISO/IEC 9899:1990,简称 C90。但通常仍习惯称其为 C89(强调 ANSI 的完成时间)。
    • ANSI C:指同一标准,但因由 ANSI 首次发布,所以常被称为 ANSI C。
  • C89/C90 是 C 语言的第一个国际标准,后续的 C99、C11、C17 等标准均在此基础上演进。

3. 嵌入式开发中为什么常见 ANSI/C89?

嵌入式领域对代码的 确定性兼容性 要求极高,因此倾向于使用成熟稳定的标准:

  1. 历史原因:许多嵌入式编译器和工具链早期仅支持 C89,导致遗留项目和新项目习惯沿用。
  2. 兼容性:C89 的特性(如函数原型、void* 指针等)足够满足底层硬件操作需求,且避免了新标准引入的复杂性(如动态数组、复杂类型推断等)。
  3. 资源限制:嵌入式设备资源有限(如内存、算力),C89 的简洁性更适合资源受限环境。

4. ANSI C/C89 的核心特性

  • 必须显式声明变量(不能在代码中间声明变量)。
  • 函数原型(Function Prototypes)的强制使用(避免隐式声明)。
  • 标准库的规范化(如 <stdio.h><stdlib.h> 等)。
  • 预处理器的改进(如 #elif 的支持)。

5. 代码示例:ANSI C 的典型风格

#include <stdio.h>/* 函数必须显式声明返回值类型和参数 */
int add(int a, int b); // ANSI C 要求函数原型int main(void) {int x = 10, y = 20;int result = add(x, y);printf("Result: %d\n", result);return 0;
}/* 函数定义需明确参数类型 */
int add(int a, int b) {return a + b;
}

6. 如何指定编译器使用 ANSI/C89 标准?

  • 在 GCC 中,可以通过以下选项强制使用 C89 标准:
    gcc -std=c89 -pedantic -Wall -Wextra your_code.c
    
    或使用传统别名 -ansi
    gcc -ansi -pedantic -Wall -Wextra your_code.c
    
    -pedantic 用于严格遵循标准,-Wall -Wextra 启用额外警告)

7. C89 的后续演进

  • C99(1999 年):引入了单行注释(//)、变长数组(VLA)、inline 关键字等。
  • C11(2011 年):支持多线程、泛型宏等。
  • C17(2018 年):主要修复 C11 的问题,无新功能。
  • 嵌入式开发中,C99/C11 的普及度逐渐提高,但 C89 仍是许多项目的基线。

总结

  • ANSI C 就是 C89/C90,是 C 语言的第一个标准化版本。
  • 在嵌入式开发中,C89 因其稳定性和广泛支持,仍是常见的选择,尤其是对老旧硬件或严格兼容性要求的场景。

您提到的内容基本正确,但为了更严谨,以下是对您描述的补充和细化:


1. ANSI C 和 C89/C90 的关系

  • 核心结论:ANSI C、C89、C90 本质是同一标准,区别仅在于发布机构和时间:
    • ANSI C:由美国国家标准协会(ANSI)于 1989 年正式批准,因此得名。
    • C89:通常指 ANSI 在 1989 年完成的标准草案(ANSI X3.159-1989),强调时间节点。
    • C90:ISO 于 1990 年采纳 ANSI C 标准,发布为 ISO/IEC 9899:1990,内容与 C89 完全一致。名称差异仅因 ISO 的标准化流程导致。
  • 关键点:ANSI C、C89、C90 是同一标准的三个名称,无实质区别。

2. 嵌入式开发为何常见 C89?

您的解释正确,但可补充以下细节:

  1. 编译器支持
    • 许多嵌入式编译器(如 Keil、IAR)长期仅支持 C89,尤其是针对 8/16 位 MCU(如 8051、PIC)的工具链。
    • 即使现代编译器支持 C99/C11,企业代码规范(如 MISRA C)仍可能强制使用 C89 子集,以确保代码可移植性。
  2. 代码确定性
    • C89 禁止“代码中间声明变量”(如 for (int i=0; ...)),强制变量集中在作用域开头。这种限制能减少开发者因变量作用域混乱引发的错误(对嵌入式调试尤为重要)。
  3. 硬件资源限制
    • C99 的变长数组(VLA)可能引发栈溢出风险,而 C89 的静态内存分配更可控。
    • C11 的多线程支持在单线程裸机嵌入式系统中无意义,徒增复杂度。

3. ANSI C/C89 的特性补充

  • C89 与 K&R C 的区别
    • K&R C(1978 年《C 编程语言》书中的非标准 C)允许函数隐式声明(如 int add(); 不指定参数),而 C89 强制函数原型(如 int add(int a, int b);),避免类型不匹配。
    • C89 引入 void 类型(如 void* 指针和 void 函数返回),取代 K&R C 中未指定返回类型的默认 int 行为。
  • C89 的典型限制
    • 变量声明:必须在作用域开头(C99 允许在代码中间声明,如 for (int i=0; ...))。
    • 注释:仅支持 /* ... */,不支持 // 单行注释(C99 引入)。
    • 没有布尔类型(C99 引入 _Bool<stdbool.h>)。

4. 代码示例的严谨性

您的代码符合 C89,但需注意:

#include <stdio.h>/* C89 中函数原型不是强制要求,但强烈推荐 */
int add(int a, int b); // 函数原型(ANSI C 的改进)int main(void) {int x = 10, y = 20; // 变量必须在作用域开头声明int result = add(x, y);printf("Result: %d\n", result);return 0;
}int add(int a, int b) { // 参数类型必须明确(K&R C 允许省略)return a + b;
}
  • 修正点:C89 不强制函数原型(从 K&R C 升级时保留兼容性),但函数原型是 ANSI C 的重要改进,编译器会警告隐式函数声明(如 -Wall)。

5. 编译器选项的注意事项

  • -ansi 的歧义性
    • GCC 的 -ansi 选项等同于 -std=c89,但某些文档可能误以为它代表“最新 ANSI 标准”。实际上,GCC 的 -ansi 永远指向 C89,与 C11/C17 无关。
    • 若需明确使用 C89,建议优先使用 -std=c89,避免混淆。
  • 严格模式
    gcc -std=c89 -pedantic-errors -Wall -Wextra your_code.c
    
    -pedantic-errors 会将不符合 C89 的代码视为错误(而非警告),适合严格合规场景。

6. C89 的后续演进与嵌入式现状

  • C99 的渗透
    • 现代嵌入式编译器(如 ARM GCC、Clang)逐渐支持 C99,允许单行注释 (//) 和中间变量声明,但对动态特性(如 VLA)仍持谨慎态度。
    • 部分嵌入式项目在 新模块 中使用 C99,但 核心代码 保持 C89。
  • C11/C17 的困境
    • 原子操作(<stdatomic.h>)和线程支持(<threads.h>)在裸机或 RTOS 中无实用价值。
    • 嵌入式社区对 C11/C17 的接受度较低,主流仍是 C89/C99。

总结

您的描述正确,但需强调:

  1. ANSI C = C89 = C90,只是名称差异。
  2. 嵌入式领域偏好 C89 源于历史兼容性、代码确定性和硬件限制,而非技术先进性。
  3. C89 的限制(如变量声明位置)是其被选中的原因之一,而非缺点。
  4. 现代嵌入式开发中,C99 的采用率正在上升,但 C89 仍是事实基线。

-pedantic-errors 是 GCC 编译器中的一个关键选项,用于强制代码严格遵循指定的 C 语言标准,并将任何不符合该标准的行为视为编译错误(而不仅仅是警告)。以下是它的详细作用和使用场景:


1. 核心功能

  • 严格标准合规性检查
    • 当使用 -std=c89-std=c99 等选项指定 C 标准时,-pedantic-errors 会检测代码中所有不符合该标准的语法或特性。
    • 若代码中使用了目标标准不允许的扩展或特性,直接报错并终止编译(而非仅警告)。
  • -pedantic 的区别
    • -pedantic:对不符合标准的代码生成警告,但编译继续。
    • -pedantic-errors:将这类警告升级为错误,编译终止。

2. 使用场景示例

示例代码(main.c):
#include <stdio.h>int main() {// 单行注释(C99 特性,C89 不支持)int x = 10;printf("%d\n", x);return 0;
}
编译命令:
gcc -std=c89 -pedantic-errors main.c -o main
输出结果:
main.c: In function ‘main’:
main.c:4:5: error: C++ style comments are not allowed in ISO C90 [-Werror]4 |     // 单行注释(C99 特性,C89 不支持)|     ^
main.c:4:5: note: (this will be reported only once per input file)
cc1: all warnings being treated as errors
  • 关键点:代码中的 // 单行注释是 C99 引入的特性,而编译时指定了 -std=c89(C89 标准)。-pedantic-errors 会将其视为错误,导致编译失败。

3. 嵌入式开发中的用途

在嵌入式开发中,-pedantic-errors 常用于以下场景:

  1. 确保代码可移植性
    • 避免依赖编译器扩展(如 GCC 的 __attribute__ 或特定硬件的内联汇编),确保代码能在不同编译器或平台上编译。
  2. 强制遵守企业规范
    • 若项目要求严格遵循 C89/C99 标准(如 MISRA C),此选项可防止开发者误用新特性。
  3. 规避未定义行为
    • 如 C89 中未初始化变量的值、指针越界等,结合 -Wall -Wextra 可最大限度捕捉潜在问题。

4. 与其他选项的对比

选项行为
-pedantic对不符合标准的代码生成警告,但编译继续。
-pedantic-errors将不符合标准的代码视为错误,编译终止。
-Werror将所有警告视为错误(包括非标准问题,如未使用变量、类型转换等)。
推荐组合:
gcc -std=c89 -pedantic-errors -Wall -Wextra main.c
  • -Wall -Wextra:启用额外警告(如未使用变量、可疑的类型转换)。
  • -pedantic-errors:严格限制标准合规性。
  • 这种组合是嵌入式开发中常见的“高严格度”编译配置。

5. 注意事项

  1. 编译器扩展的禁用

    • 某些编译器扩展(如 GCC 的 case ranges)会被 -pedantic-errors 禁止:
      switch (x) {case 1 ... 5: // GCC 扩展,C 标准不支持break;
      }
      
      编译时会报错:error: range expressions in switch statements are not allowed in ISO C
  2. 标准库的依赖

    • 标准库的实现可能包含编译器扩展(如某些平台的 <stdio.h>)。若标准库头文件触发了 -pedantic-errors,可能需要调整代码或编译器配置。
  3. 灵活性与严格性的平衡

    • 若项目中必须使用某些编译器扩展(如嵌入式硬件寄存器映射),可通过 -Wno-error=pedantic 局部禁用错误,但需谨慎。

6. 总结

  • -pedantic-errors 的作用:将代码中不符合指定 C 标准的行为视为错误,确保严格合规。
  • 嵌入式开发意义:避免依赖不可移植的编译器扩展,提升代码健壮性和可维护性。
  • 典型用法gcc -std=c89 -pedantic-errors -Wall -Wextra

通过此选项,开发者可以强制代码遵循目标标准,减少跨平台或长期维护时的隐性风险。

相关文章:

ANSI C 和 C89/C90

在嵌入式开发中提到的 ANSI 通常是指 ANSI C 标准&#xff0c;而 C89 是该标准的另一个名称。以下是详细的解释和两者的关系&#xff1a; 1. ANSI C 是什么&#xff1f; ANSI&#xff08;American National Standards Institute&#xff0c;美国国家标准协会&#xff09;在 19…...

git仓库中.git文件夹过大的问题

由于git仓库中存放了较大的文件&#xff0c;之后即使在gitignore中添加&#xff0c;也不会导致.git文件夹变小。 参考1 2 通过 du -d 1 -h查看文件大小 使用 git rev-list --objects --all | grep "$(git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail…...

【android bluetooth 框架分析 01】【关键线程 6】【主线程与核心子线程协作机制】

主线程与核心子线程的协作机制 一、蓝牙进程中的线程架构全景图 在Android蓝牙协议栈中&#xff0c;线程分工非常明确&#xff0c;形成了一个高效的协作体系。我们可以将其想象成一个医院的组织架构&#xff1a; 主线程&#xff1a;相当于医院的"前台接待处"&#…...

蓝桥杯比赛 python程序设计——神奇闹钟

问题描述 小蓝发现了一个神奇的闹钟&#xff0c;从纪元时间&#xff08;19701970 年 11 月 11 日 00&#xff1a;00&#xff1a;0000&#xff1a;00&#xff1a;00&#xff09;开始&#xff0c;每经过 xx 分钟&#xff0c;这个闹钟便会触发一次闹铃 (纪元时间也会响铃)。这引起…...

旋转位置编码

旋转位置编码&#xff08;Rotary Position Embedding&#xff0c;RoPE&#xff09;: 一种能够将相对位置信息依赖集成到 self-attention 中并提升 transformer 架构性能的位置编码方式。 和相对位置编码相比&#xff0c;RoPE 具有更好的外推性&#xff0c;目前是大模型相对位…...

2025年第十八届“认证杯”数学中国数学建模网络挑战赛【B题】完整版+代码+结果

2025年第十八届“认证杯”数学中国数学建模网络挑战赛B题完整word论文代码结果https://download.csdn.net/download/qq_52590045/90592749↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓…...

管理、切换多个 hosts工具之SwitchHosts

管理、切换多个 hosts工具之SwitchHosts 官网&#xff1a;https://switchhosts.vercel.app/zh github: https://github.com/oldj/SwitchHosts 原作者博客&#xff1a;https://oldj.net/article/2015/12/20/switchhosts-v3/ SwitchHosts是一个用于管理hosts文件的应用程序&…...

【Reinforcement Learning For Quadruped Control】2

奖励函数。奖励函数是状态和动作的函数 r t ( s t , a t , s t 1 ) r_t(s_t, a_t, s_{t1}) rt​(st​,at​,st1​)&#xff0c;是强化学习&#xff08;RL&#xff09;算法的驱动力。在四足机器人等复杂系统的背景下&#xff0c;奖励可能是速度偏差与期望速度的差异、关节扭矩值…...

Windows启动总是卡在LOGO画面有哪些原因

1. 硬件问题 硬盘故障&#xff08;HDD/SSD&#xff09;&#xff1a;坏道、损坏或接口松动。 内存故障&#xff1a;内存条接触不良或损坏。 外设冲突&#xff1a;U盘、移动硬盘、打印机等外接设备导致系统无法正常启动。 2. 系统文件损坏 Windows 关键文件丢失或损坏&#x…...

4月11日随笔

本来以为大风会很厉害&#xff0c;本来今天早八的微积分不想去了。但是起床发现并没有很大的风&#xff0c;还是去了。 中午回来的路上突然变天&#xff0c;雷阵雨转冰雹。下了大概半小时&#xff0c;所幸挨淋的不是很严重。 中午打了首胜&#xff0c;AI的基本弄完了&#xf…...

蓝桥杯 — — 接龙数列

蓝桥杯 — — 接龙数列 接龙数列 题源&#xff1a;0接龙数列 - 蓝桥云课 题目&#xff1a; 输入样例&#xff1a; 5 11 121 22 12 2023输出样例&#xff1a; 1分析&#xff1a; 首先观察评测用例规模&#xff0c; N N N 最大为 1 0 5 10^5 105&#xff0c;因此时间复杂度应…...

链式多分支规则树模型的应用

目录 引入 开始调用 初始化 执行流程 欢迎关注我的博客&#xff01;26届java选手&#xff0c;一起加油&#x1f498;&#x1f4a6;&#x1f468;‍&#x1f393;&#x1f604;&#x1f602; 引入 最近在学习一个项目中的链式多分枝规则树模型的使用&#xff0c;模型如下&#…...

【后端开发】初识Spring IoC与SpringDI、图书管理系统

文章目录 图书管理系统用户登录需求分析接口定义前端页面代码服务器代码 图书列表展示需求分析接口定义前端页面部分代码服务器代码Controller层service层Dao层modle层 Spring IoC定义传统程序开发解决方案IoC优势 Spring DIIoC &DI使用主要注解 Spring IoC详解bean的存储五…...

VMware虚拟机Ubuntu磁盘扩容

VMware中操作&#xff1a; 选择要扩容的虚拟机&#xff0c;点击编辑虚拟机设置 打开后点击磁盘——>点击扩展&#xff08;注意&#xff1a;如果想要扩容的话需要删除快照&#xff09; 调整到你想要的容量 点击上图的扩展——>确定 然后我们进到虚拟机里面 首先&#…...

嵌入式MCU常用模块

日后填坑。 无线通信模块 NRF24L01 基本介绍 使用方法 示例代码 蓝牙模块 基本介绍 使用方法 示例代码 WIFI模块 基本介绍 使用方法 示例代码 红外遥控模块 基本介绍 使用方法 示例代码 有线通信模块 can模块 基本介绍 使用方法 示例代码 传感器模块 DHT11模块 基本介绍 使用方…...

算法 模版

cin cout加快读取速度&#xff1a; ios::sync_with_stdio(false); 高精度*高精度 vector<int> mul(vector<int>& a, vector<int>& b) {vector<int>c(b.size()a.size()5,0);for (int i 0; i < a.size(); i) {for (int j 0; j < b.si…...

C++指针(三)

个人主页:PingdiGuo_guo 收录专栏&#xff1a;C干货专栏 文章目录 前言 1.字符指针 1.1字符指针的概念 1.2字符指针的用处 1.3字符指针的操作 1.3.1定义 1.3.2初始化 1.4字符指针使用注意事项 2.数组参数&#xff0c;指针参数 2.1数组参数 2.1.1数组参数的概念 2.1…...

二分查找4:35. 搜索插入位置

链接&#xff1a;35. 搜索插入位置 - 力扣&#xff08;LeetCode&#xff09; 题解&#xff1a; 本题是最基础的二分查找算法 class Solution { public:int searchInsert(vector<int>& nums, int target) {int left0;int rightnums.size()-1;int midleft(right-lef…...

数据可视化 —— 多边图应用(大全)

一、介绍&#xff1a; 多边形图&#xff0c;也就是在数据可视化中使用多边形来呈现数据的图表&#xff0c;在多个领域都有广泛的应用场景&#xff0c;以下为你详细介绍&#xff1a; 金融领域 投资组合分析&#xff1a;在投资组合管理中&#xff0c;多边形图可用于展示不同资…...

服务器加空间失败 growpart /dev/vda 1

[rootecm-2c5 ~]# growpart /dev/vda 1 unexpected output in sfdisk --version [sfdisk&#xff0c;来自 util-linux 2.23.2] [rootecm-2c5 ~]# xfs_info /dev/vda1 meta-data/dev/vda1 isize512 agcount21, agsize1310656 blks sectsz512 attr2, projid32bit1 crc1 finobt0…...

tree-sitter的grammar.js解惑

❓问题1&#xff1a;grammar.js 不是用正则表达式 /.../ 吗&#xff1f;为什么有 print 这样的字符串&#xff1f; ✅ 回答&#xff1a; grammar.js 分成两类“终结符”表示法&#xff1a; 表达方式含义xxx直接匹配该字符串字面量/regex/匹配符合正则的文本 &#x1f4a1; …...

前端-Vue3

1. Vue3简介 2020年9月18日&#xff0c;Vue.js发布版3.0版本&#xff0c;代号&#xff1a;One Piece&#xff08;n 经历了&#xff1a;4800次提交、40个RFC、600次PR、300贡献者 官方发版地址&#xff1a;Release v3.0.0 One Piece vuejs/core 截止2023年10月&#xff0c;最…...

【毕设通关】——文献查阅

目录 &#x1f552; 1. 常见文献库&#x1f552; 2. 快速寻找文献&#x1f552; 3. 引用网页资料 &#x1f552; 1. 常见文献库 中文文献&#xff1a; CNKI中国知网万方数据维普资讯超星期刊 英文文献&#xff1a; 谷歌学术Sci-hubOALib&#xff08;Open Access Library&am…...

贪心算法-跳跃游戏

55.跳跃游戏 给你一个非负整数数组 nums &#xff0c;你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标&#xff0c;如果可以&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。输入&#xf…...

程序化广告行业(75/89):行业发展与PC端和移动端投放差异

程序化广告行业&#xff08;75/89&#xff09;&#xff1a;行业发展与PC端和移动端投放差异 在互联网广告领域&#xff0c;程序化广告正发挥着越来越重要的作用。今天&#xff0c;咱们就来一起深入了解一下程序化广告行业&#xff0c;希望能和大家一起学习进步&#xff0c;共同…...

Windows 下搭建 Git 本地服务器并进行开发

目录 1. 安装 Git for Windows 2. 创建本地 Git 仓库&#xff08;裸仓库&#xff09; 3. 设置本地开发环境 (1) 在开发机器上克隆仓库 (2) 提交代码 4. 远程访问本地 Git 服务器 方法 1&#xff1a;使用 SSH 访问 (1) 配置 SSH 服务器 (2) 客户端连接 方法 2&#xf…...

C++中stack函数的用法示例

C++中stack函数的用法示例 std::stack 是C++标准模板库(STL)中的一个容器适配器,它提供了后进先出(LIFO)的数据结构。以下是stack的一些常用函数及其用法示例: 1. 基本操作 #include <iostream> #include <stack>int main() {// 创建一个整数栈std::stack<…...

网络安全1

一、网络安全的定义与重要性 定义 网络安全&#xff08;信息技术安全&#xff09;&#xff1a;保护计算机系统和网络免受电子攻击的技术和过程&#xff0c;包括保护个人信息和企业数据不被盗窃、破坏或非法访问。涵盖范围&#xff1a;网络设备、数据传输、系统运行安全。 重要…...

腾讯会议for flatpak

今天想切换opensuse&#xff0c;无意间查询了腾讯会议等软件的下载方式&#xff0c;发现腾讯会议是deb包安装的。但是过程中&#xff0c;我发现flatpak仓库中居然有腾讯会议&#xff0c;然后尝试着在wayland下的debian12中进行了安装。 发现居然可以正常开启视频等操作。 下载…...

【C++初学】C++核心编程技术详解(二):类与继承

函数提高 3.1 函数默认参数 函数的形参可以有默认值&#xff0c;调用时可以省略这些参数。 示例代码&#xff1a; int func(int a, int b 10, int c 10) {return a b c; }int main() {cout << "ret " << func(20, 20) << endl;cout <<…...

紧急任务插入,如何不影响原计划

面对紧急任务插入&#xff0c;为确保不影响原计划&#xff0c;需要做到&#xff1a;重新明确任务优先级、合理调整资源配置、灵活管理时间和任务、建立紧急任务处理流程、有效沟通与反馈。其中&#xff0c;重新明确任务优先级最为关键。这可以帮助项目团队快速确定哪些任务需立…...

蓝桥杯赛前题

开始每个人能量为3 答题了&#xff0c;答题者1 扣分最后算 #include<bits/stdc.h> using namespace std;const int N1e510; int a[N]; int main(){int n,k,q;cin>>n>>k>>q;for(int i1;i<n;i){a[i]k; }for(int i1;i<q;i){int x;cin>>x;a[…...

ETL的核心概念与价值

在数字化转型的浪潮中&#xff0c;数据已成为企业决策的基石。然而&#xff0c;面对分散、异构且质量参差不齐的数据源&#xff0c;如何高效整合并挖掘其价值&#xff1f;这一问题的答案&#xff0c;指向了一项关键的技术——ETL&#xff08;Extract-Transform-Load&#xff09…...

神经动力学系统与计算及AI拓展

大脑&#xff0c;一个蕴藏在我们颅骨之内的宇宙&#xff0c;以活动脉动&#xff0c;如同由电信号和化学信号编织而成的交响乐&#xff0c;精巧地协调着思想、情感和行为。但是&#xff0c;这种复杂的神经元舞蹈是如何产生我们丰富多彩的精神生活的呢&#xff1f;这正是神经动力…...

力扣DAY46-50 | 热100 | 二叉树:展开为链表、pre+inorder构建、路径总和、最近公共祖先、最大路径和

前言 中等 、困难 √&#xff0c;越来越有手感了&#xff0c;二叉树done&#xff01; 二叉树展开为链表 我的题解 前序遍历树&#xff0c;当遇到左子树为空时&#xff0c;栈里pop节点&#xff0c;取右子树接到左子树位置&#xff0c;同时断开该右子树与父节点的连接&#x…...

备赛蓝桥杯-Python-考前突击

额&#xff0c;&#xff0c;离蓝桥杯开赛还有十个小时&#xff0c;最近因为考研复习节奏的问题&#xff0c;把蓝桥杯的优先级后置了&#xff0c;突然才想起来还有一个蓝桥杯呢。。 到目前为止python基本语法熟练了&#xff0c;再补充一些常用函数供明天考前再背背&#xff0c;算…...

蓝桥杯 Web 方向入门指南:从基础到实战

一、蓝桥杯 Web 方向简介 蓝桥杯是国内最具影响力的编程竞赛之一&#xff0c;Web 方向主要考察前端开发和后端服务能力。比赛形式为 4 小时限时编程&#xff0c;题型包括页面布局、数据交互、API 开发等。根据最新大纲&#xff0c;大学组需掌握 HTML5、CSS3、JavaScript、Vue.…...

生命篇---心肺复苏、AED除颤仪使用、海姆立克急救法、常见情况急救简介

生命篇—心肺复苏、AED除颤仪使用、海姆立克急救法、常见情况急救简介 文章目录 生命篇---心肺复苏、AED除颤仪使用、海姆立克急救法、常见情况急救简介一、前言二、急救1、心肺复苏&#xff08;CPR&#xff09;&#xff08;1&#xff09;适用情况&#xff08;2&#xff09;操作…...

C++Cherno 学习笔记day19 [76]-[80] std::optional、variant、any

b站Cherno的课[76]-[80] 一、如何处理OPTIONAL数据 std::optional二、单一变量存放多类型的数据 std::variant三、如何存储任意类型的数据 std::any四、如何让C运行得更快五、如何让C字符串更快 一、如何处理OPTIONAL数据 std::optional std::optional C17 数据是否存在是可选…...

【Python Requests 库详解】

目录 简介一、安装与导入安装导入 二、发送 HTTP 请求1. GET 请求基本请求URL 参数 2. POST 请求表单数据提交JSON 数据提交文件上传 3. 其他方法PUT 请求示例DELETE 请求示例 三、处理响应1. 响应内容解析文本内容处理二进制内容处理JSON 数据处理 2. 响应状态与头信息状态码检…...

二维偏序-蓝桥20102,没写完

代码&#xff1a; 暴力&#xff1a;只过了35%,双重for循环o(n^2)1e10; #include <iostream> #include <bits/stdc.h> using namespace std; const int N1e910; typedef long long LL; typedef pair<int,int> PII;int main() {// 请在此输入您的代码//相当于…...

ASEG的鉴定

等位基因特异性表达(Allele-Specific Expression, ASE)基因的鉴定是研究杂种优势和基因表达调控的重要手段。以下是鉴定ASE基因的详细流程和方法: ### **1. 实验设计与样本准备** - **选择材料**:选择杂交种及其亲本作为研究材料。例如,玉米中的B73和Mo17及其杂交组合B73…...

从零开始:在 GrapesJS Style Manager 中新增 row-gap 和 column-gap

在前端开发中&#xff0c;页面样式的灵活性和可扩展性至关重要。GrapesJS 作为一个强大的网页构建工具&#xff0c;其内置的 Style Manager 提供了常见的 CSS 样式的可视化设置&#xff0c;极大地方便了开发者和设计师。然而&#xff0c;随着项目需求的不断变化&#xff0c;有些…...

解决双系统ubuntu24.04开机出现花屏等情况

1. 问题描述&#xff1a; 刚刚装上的双系统ubuntu24.04开机就出现花屏情况 2. 解决方案 安装显卡驱动 查看显卡型号 查看显卡硬件支持的驱动类型 ubuntu-drivers devices如果输入没有反映&#xff0c;请更新软件源&#xff0c;或者换官方软件源 sudo add-apt-repository…...

基于SpringBoot的智慧社区管理系统(源码+数据库)

499基于SpringBoot的智慧社区管理系统&#xff0c;系统包含三种角色&#xff1a;管理员、用户主要功能如下。 【用户功能】 1. 首页&#xff1a;查看系统。 2. 超市商品&#xff1a;浏览超市中各类商品信息。 3. 动物信息&#xff1a;了解社区内的动物种类和相关信息。 4. 车位…...

通俗理解CLIP模型如何实现图搜图乃至文搜图

一、图搜图与文搜图 图搜图和文搜图的场景相信大家并不少见&#xff0c;比如度娘的搜索框就可以直接上传图片找到相似的图片&#xff0c;还有某宝某团都有这种上传图片匹配到相似商品或者商品页的推荐的功能。那比如我想搜一张“正在跳舞的狗”的图片&#xff0c;是不是就能搜…...

谷歌最近放出大招——推出全新“Agent Development Kit(简称ADK)

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…...

std::string` 类

以下是对 std::string 类中 修改操作 和 字符串操作 的示例代码&#xff0c;帮助你更好地理解这些函数的使用&#xff1a; 5. 修改操作 (1) operator 用于追加字符串、C 风格字符串或字符。 #include <iostream> #include <string>int main() {std::string str …...

Sping Cloud配置和注册中心

1.Nacos实现原理了解吗&#xff1f; Nacos是注册中心&#xff0c;主要是帮助我们管理服务列表。Nacos的实现原理大概可以从下面三个方面来讲&#xff1a; 服务注册与发现&#xff1a;当一个服务实例启动时&#xff0c;它会向Nacos Server发送注册请求&#xff0c;将自己的信息…...

Java基础 - 泛型(常见用法)

文章目录 泛型类泛型方法泛型类派生子类示例 1&#xff1a;子类固定父类泛型类型&#xff08;StringBox 继承自 Box<String>&#xff09;示例 2&#xff1a;子类保留父类泛型类型&#xff08;AdvancedBox<T> 继承自 Box<T>)示例 3&#xff1a;添加子类自己的…...