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

【C命名规范】遵循良好的命名规范,提高代码的可读性、可维护性和可复用性

/********************************************************************
* @brief @param @return @author @date @version是代码书写的一种规范
* @brief :简介,简单介绍函数作用
* @param :介绍函数参数
* @return:函数返回类型说明
* @exception NSException 可能抛出的异常.
* @author zhangsan: 作者
* @date 2011-07-27 22:30:00 :时间
* @version 1.0 :版本
* @property :属性介绍
* *********************************************************************/

【变量的命名习惯】
变量名是自定义的,严格遵循 标识符 命名规则。

  • 见名知意
  • 大驼峰:即每个单词首字母都大写,例如:MyName
  • 小驼峰:即第二个(含)以后的单词首字母大写,例如:myName
  • 小写+下划线:例如:my_name

个人风格分享

1.变量

  • 全局变量:小驼峰(小驼峰+下划线),例如 myNamemy_Name

  • 局部变量: 全小写(小写+下划线),例如 indexmy_name

2.常量: 全大写字母、下划线分隔单词和描述性名称

#define MAX_BUFFER_SIZE 1024
#define PI_VALUE 3.14159
#define DEFAULT_TIMEOUT 30

3.标志变量

  • 全局:g_ + 小驼峰 + 下划线,例如 g_has_Err
  • 局部: g_ + 全小写 + 下划线 , 例如 g_has_err

4.函数名 大驼峰(大驼峰+下划线), 例如 GetValue, Get_Value()

动词+名词结构 ,例如 GetValue, Get_Value()

5.结构体 大驼峰(大驼峰 + 下划线),例如

// 定义结构体
typedef struct {int id;   // 结构体成员局部的用小写char name[50];int age;
} StudentInfo;
// Student_Info

6.枚举 : 枚举成员名使用全大写字母, 前缀标识枚举成员

typedef enum {STATUS_SUCCESS, // 前缀标识枚举成员STATUS_ERROR,  // 全大写字母STATUS_PENDING
} StatusCode;
// Status_Code;

总结就是凡是有带大写的都跟全局有关,凡是标志位够加g_,常量用全大写字母表示。


在C语言编程中,良好的命名规则有助于提高代码的可读性可维护性可扩展性。以下是一些值得学习和遵守的命名规则:

  1. 变量命名规则:

    • 使用小写字母,单词之间用下划线分隔,例如:student_age, total_sumindex
    • 变量名应具有描述性,反映其用途或含义。
  2. 常量命名规则:

    • 使用全大写字母,单词之间用下划线分隔,例如:MAX_BUFFER_SIZE, PI_VALUE
    • 常量名通常使用 #defineconst 关键字定义。
  3. 函数命名规则:

    • 使用动词或动词短语开头,后接名词,单词之间用下划线分隔,例如:calculate_sum, print_student_info
    • 函数名应清晰描述其功能或操作。
  4. 结构体和联合体命名规则:

    • 结构体和联合体类型名使用大写字母开头,每个单词的首字母大写,例如:StudentInfo, EmployeeRecord
    • 结构体变量名使用小写字母,单词之间用下划线分隔,例如:student_info, employee_record
  5. 枚举命名规则:

    • 枚举类型名使用大写字母开头,每个单词的首字母大写,例如:Color, Status
    • 枚举成员名使用全大写字母,单词之间用下划线分隔,例如:RED, GREEN, SUCCESS, FAILURE
  6. 文件名规则:

    • 文件名应简洁且具有描述性,通常使用小写字母,单词之间用下划线分隔,例如:main.c, student_info.h
  7. 缩写和简写:

    • 尽量避免使用不常见的缩写和简写,如果使用缩写,确保其含义清晰并在代码中有解释。
  8. 命名长度:

    • 命名长度应适中,过长的名字会影响可读性,过短的名字则可能不够描述性。一般推荐变量名长度在3-20个字符之间。
  9. 前缀和后缀:

    • 使用前缀或后缀区分不同作用域或用途的变量,例如:全局变量使用 g_ 前缀,静态变量使用 s_ 前缀,指针变量使用 _ptr 后缀。

通过遵守这些命名规则,可以使代码更具可读性和可维护性,减少出错的概率。


全局变量的标志位变量命名时,应该遵循一些具体的规则,以确保代码的可读性和易维护性。以下是一些建议:

  1. 使用前缀标识全局变量:

    • g_ 前缀来标识全局变量。例如:g_flag_connected, g_flag_initialized
  2. 清晰描述变量含义:

    • 变量名应反映其用途或含义。使用描述性单词使其一目了然。例如:g_flag_error_occurred, g_flag_data_ready
  3. 使用布尔命名约定:

    • 对于布尔类型的标志位变量,使用 is, has, can 等前缀。例如:g_is_connected, g_has_error, g_can_read
  4. 统一命名风格:

    • 保持命名的一致性,确保团队中所有开发者遵循相同的命名规范。例如:所有标志位变量都以 g_flag_ 开头,然后描述具体含义。
  5. 避免使用缩写:

    • 除非是非常常见和容易理解的缩写,否则尽量避免使用缩写,以防止误解。例如:g_flag_buffer_overflow 而不是 g_flag_buf_ovf
  6. 示例命名:

    • g_flag_initialized - 表示系统或模块是否已初始化。
    • g_flag_error_occurred - 表示是否发生了错误。
    • g_flag_data_ready - 表示数据是否已经准备好。
    • g_is_connected - 表示是否已经连接。
    • g_has_data - 表示是否有数据可用。

通过遵守这些命名规则,可以使代码更具可读性和一致性,方便团队协作和代码维护。


在单片机开发中,良好的编程习惯和命名规则可以极大地提高代码的可读性、可维护性和可靠性。以下是一些值得学习和遵守的编程习惯和命名规则:

编程习惯

  1. 注释代码:

    • 在代码中添加必要的注释,解释代码的功能、逻辑和重要的变量或函数。确保注释清晰且有意义。
  2. 模块化编程:

    • 将代码划分为多个模块或文件,每个模块负责特定的功能。这样可以提高代码的可维护性和可复用性。
  3. 使用常量和宏定义:

    • 使用 #defineconst 定义常量,避免在代码中使用硬编码的数值。例如:#define MAX_BUFFER_SIZE 1024
  4. 初始化所有变量:

    • 在使用变量之前进行初始化,以防止未定义行为和潜在的错误。
  5. 防御性编程:

    • 编写健壮的代码,处理所有可能的错误情况和异常情况。使用断言(assert)来捕捉不应出现的条件。
  6. 合理使用中断:

    • 中断服务程序(ISR)应该尽量短小精悍,避免在ISR中执行耗时操作。将复杂的处理移到主程序中完成。
  7. 遵循代码规范:

    • 遵循团队或项目的编码规范,确保代码风格一致。常见的编码规范包括命名规则、缩进风格、括号位置等。

命名规则

  1. 变量命名:

    • 使用描述性名称,避免使用单个字符或无意义的名称。变量名应反映其用途或含义。
    • 使用小写字母,单词之间用下划线分隔。例如:sensor_value, motor_speed
  2. 常量命名:

    • 使用全大写字母,单词之间用下划线分隔。例如:MAX_BUFFER_SIZE, PI_VALUE
  3. 函数命名:

    • 使用动词或动词短语开头,后接名词,单词之间用下划线分隔。例如:init_motor, read_sensor_value
  4. 结构体和枚举命名:

    • 结构体和枚举类型名使用大写字母开头,每个单词的首字母大写,例如:SensorData, ErrorCode
    • 结构体变量名使用小写字母,单词之间用下划线分隔,例如:sensor_data, error_code
  5. 宏定义命名:

    • 使用全大写字母,单词之间用下划线分隔。例如:#define LED_PIN 13, #define TIMER_PERIOD 1000
  6. 文件命名:

    • 文件名应简洁且具有描述性,通常使用小写字母,单词之间用下划线分隔,例如:main.c, sensor_driver.h

代码示例

// 常量和宏定义
#define MAX_BUFFER_SIZE 1024
#define LED_PIN 13// 结构体定义
typedef struct {int sensor_value;float temperature;
} SensorData;// 函数声明
void init_motor(void);
int read_sensor_value(void);// 主函数
int main(void) {// 变量初始化SensorData sensor_data = {0, 0.0};int sensor_value = 0;// 初始化电机init_motor();// 读取传感器值sensor_value = read_sensor_value();// 处理传感器数据sensor_data.sensor_value = sensor_value;sensor_data.temperature = sensor_value * 0.1;return 0;
}// 函数定义
void init_motor(void) {// 初始化电机的代码
}int read_sensor_value(void) {// 读取传感器值的代码return 42;
}

这些编程习惯和命名规则可以帮助你编写更高质量、更易维护的代码,尤其是在团队协作和长期维护中显得尤为重要。


在编程中,断言(assert)是一种用于捕捉不应出现的条件的调试工具。断言可以在开发和调试过程中帮助检测程序中的逻辑错误和不一致性。当程序运行时,如果断言条件为假(false),程序会立即终止,并输出错误信息,方便开发者定位和修复问题。

使用断言的步骤

  1. 包含头文件:

    • 使用断言前,需要包含头文件 <assert.h>
  2. 使用 assert 宏:

    • 使用 assert 宏来检查条件。语法如下:
      #include <assert.h>void some_function(int value) {assert(value > 0); // 如果 value <= 0,程序将终止并输出错误信息
      }
      
  3. 编译时控制:

    • 断言在调试阶段非常有用,但在发布阶段可能不需要。可以通过定义 NDEBUG 来禁用断言。
      #define NDEBUG
      #include <assert.h>
      

示例代码

以下是一个使用断言的示例代码:

#include <assert.h>
#include <stdio.h>// 计算数组中元素的平均值
double calculate_average(int *array, int size) {// 断言数组指针不为空assert(array != NULL);// 断言数组大小大于0assert(size > 0);int sum = 0;for (int i = 0; i < size; i++) {sum += array[i];}return (double)sum / size;
}int main() {int values[] = {10, 20, 30, 40, 50};int size = sizeof(values) / sizeof(values[0]);// 调用函数前的断言assert(size > 0);double average = calculate_average(values, size);printf("Average: %.2f\n", average);return 0;
}

解释

  1. 包含头文件:

    • 代码中首先包含了 <assert.h> 头文件,这个头文件定义了 assert 宏。
  2. 使用 assert 宏:

    • calculate_average 函数中,使用了两个断言来确保输入的数组指针不为空且数组大小大于0。
    • main 函数中,使用了一个断言来确保数组大小大于0。
  3. 断言失败:

    • 如果 assert 条件为假,程序将终止并输出错误信息,包括断言失败的条件和源代码文件中的行号。

禁用断言

在发布阶段,可以通过定义 NDEBUG 来禁用断言。例如:

#define NDEBUG
#include <assert.h>

在定义 NDEBUG 后,所有 assert 语句将被预处理器移除,断言检查将不会在程序运行时执行。

总结

使用断言可以有效地捕捉程序中不应出现的条件,帮助开发者在调试阶段快速定位和修复逻辑错误。通过合理使用断言,可以提高代码的健壮性和可靠性。在发布阶段,可以通过定义 NDEBUG 来禁用断言,确保程序的性能和稳定性。


在项目中使用单片机的多个串口(如串口0、串口1、串口2)进行数据收发时,可以使用结构体来组织相关的变量,以便管理和操作这些串口。以下是一个示例,定义了一个结构体来表示三个串口的相关变量:

typedef struct {// 串口0相关变量volatile uint8_t uart0_rx_buffer[UART_RX_BUFFER_SIZE];volatile uint8_t uart0_tx_buffer[UART_TX_BUFFER_SIZE];volatile uint8_t uart0_rx_index;volatile uint8_t uart0_tx_index;volatile bool uart0_rx_complete;// 串口1相关变量volatile uint8_t uart1_rx_buffer[UART_RX_BUFFER_SIZE];volatile uint8_t uart1_tx_buffer[UART_TX_BUFFER_SIZE];volatile uint8_t uart1_rx_index;volatile uint8_t uart1_tx_index;volatile bool uart1_rx_complete;// 串口2相关变量volatile uint8_t uart2_rx_buffer[UART_RX_BUFFER_SIZE];volatile uint8_t uart2_tx_buffer[UART_TX_BUFFER_SIZE];volatile uint8_t uart2_rx_index;volatile uint8_t uart2_tx_index;volatile bool uart2_rx_complete;
} SerialPorts;// 定义一个实例化的结构体变量
SerialPorts serial_ports;

结构体成员说明:

  • uartX_rx_buffer: 串口X接收缓冲区,用于存储从串口X接收到的数据。
  • uartX_tx_buffer: 串口X发送缓冲区,用于存储待发送至串口X的数据。
  • uartX_rx_index: 串口X接收缓冲区的索引,指示下一个接收数据的位置。
  • uartX_tx_index: 串口X发送缓冲区的索引,指示下一个发送数据的位置。
  • uartX_rx_complete: 串口X接收完成标志,用于指示是否完成了一次数据接收。

注意事项:

  1. volatile 关键字

    • 在单片机编程中,通常使用 volatile 关键字来声明这些变量,以确保编译器不会对它们进行优化,保证每次访问都是直接从内存中读取或写入。
  2. 缓冲区大小定义

    • UART_RX_BUFFER_SIZEUART_TX_BUFFER_SIZE 是根据实际需求定义的宏或常量,表示串口接收和发送缓冲区的大小。
  3. 多个串口的区分

    • 结构体中通过命名方式区分不同的串口变量,如 uart0_...uart1_...uart2_...

通过这种方式,你可以方便地管理和操作多个串口的数据收发,使代码结构更清晰,易于维护和扩展。

相关文章:

【C命名规范】遵循良好的命名规范,提高代码的可读性、可维护性和可复用性

/******************************************************************** * brief param return author date version是代码书写的一种规范 * brief &#xff1a;简介&#xff0c;简单介绍函数作用 * param &#xff1a;介绍函数参数 * return&#xff1a;函数返回类型说明 * …...

Hbase面试题总结

一、介绍下HBase架构 --HMaster HBase集群的主节点&#xff0c;负责管理和协调整个集群的操作。它处理元数据和表的分区信息&#xff0c;控制RegionServer的负载均衡和故障恢复。--RegionServer HBase集群中的工作节点&#xff0c;负责存储和处理数据。每个RegionServer管理若…...

C语言部分复习笔记

1. 指针和数组 数组指针 和 指针数组 int* p1[10]; // 指针数组int (*p2)[10]; // 数组指针 因为 [] 的优先级比 * 高&#xff0c;p先和 [] 结合说明p是一个数组&#xff0c;p先和*结合说明p是一个指针 括号保证p先和*结合&#xff0c;说明p是一个指针变量&#xff0c;然后指…...

Rust学习笔记 (命令行命令) : 用override set 设置工具链

在cargo run某个项目时出现了如下错误&#xff1a;error: failed to run custom build command for ring v0.16.20&#xff08;无法运行“Ring v0.16.20”的自定义构建命令&#xff09;&#xff0c;在PowerShell命令行运行命令 rustup override set stable-msvc后成功运行。 o…...

cv::Mat类的矩阵内容输出的各种格式的例子

操作系统&#xff1a;ubuntu22.04OpenCV版本&#xff1a;OpenCV4.9IDE:Visual Studio Code编程语言&#xff1a;C11 功能描述 我们可以这样使用&#xff1a;cv::Mat M(…); cout << M;&#xff0c;直接将矩阵内容输出到控制台。 输出格式支持多种风格&#xff0c;包括O…...

Redis--注册中心集群 Cluster 集群-单服务器

与“多服务器集群”一致需要创建redis配置模板 参照以下链接 CSDN 创建redis容器 node01服务器上创建容器 docker run -d --name redis-6381 --net host --privilegedtrue \ -v /soft/redis-cluster/6381/conf/redis.conf:/etc/redis/redis.conf \ -v /soft/redis-cluster/6…...

CV01_相机成像原理与坐标系之间的转换

目录 0.引言&#xff1a;小孔成像->映射表达式 1. 相机自身的运动如何表征&#xff1f;->外参矩阵E 1.1 旋转 1.2 平移 2. 如何投影到“像平面”&#xff1f;->内参矩阵K 2.1 图像平面坐标转换为像素坐标系 3. 三维到二维的维度是如何丢失的&#xff1f;…...

Android Lint

文章目录 Android Lint概述工作流程Lint 问题问题种类警告严重性检查规则 用命令运行 LintAndroidStudio 使用 Lint忽略 Lint 警告gradle 配置 Lint查找无用资源文件 Android Lint 概述 Lint 是 Android 提供的 代码扫描分析工具&#xff0c;它可以帮助我们发现代码结构/质量…...

【算法刷题 | 动态规划14】6.28(最大子数组和、判断子序列、不同的子序列)

文章目录 35.最大子数组和35.1题目35.2解法&#xff1a;动规35.2.1动规思路35.2.2代码实现 36.判断子序列36.1题目36.2解法&#xff1a;动规36.2.1动规思路36.2.2代码实现 37.不同的子序列37.1题目37.2解法&#xff1a;动规37.2.1动规思路37.2.2代码实现 35.最大子数组和 35.1…...

vue3 vxe-grid列中绑定vxe-switch实现数据更新

1、先上一张图&#xff1a; <template #valueSlot"{ row }"><vxe-switch :value"getV(row.svalue)" change"changeSwitch(row)" /></template>function getV(value){return value 1;};function changeSwitch(row) {console.l…...

Hive SQL:实现炸列(列转行)以及逆操作(行转列)

目录 列转行行转列 列转行 函数&#xff1a; EXPLODE(ARRAY)&#xff1a;将ARRAY中的每一元素转换为每一行 EXPLODE(MAP)&#xff1a;将MAP中的每个键值对转换为两行&#xff0c;其中一行数据包含键&#xff0c;另一行数据包含值 数据样例&#xff1a; 1、将每天的课程&#…...

MD5算法详解

哈希函数 是一种将任意输入长度转变为固定输出长度的函数。 一些常见哈希函数有&#xff1a;MD5、SHA1、SHA256。 MD5算法 MD5算法是一种消息摘要算法&#xff0c;用于消息认证。 数据存储方式&#xff1a;小段存储。 数据填充 首先对我们明文数据进行处理&#xff0c;使其…...

ES6的代理模式-Proxy

语法 target 要使用 Proxy 包装的目标对象&#xff08;可以是任何类型的对象&#xff0c;包括原生数组&#xff0c;函数&#xff0c;甚至另一个代理handler 一个通常以函数作为属性的对象&#xff0c;用来定制拦截行为 const proxy new Proxy(target, handle)举个例子 <s…...

排序(堆排序、快速排序、归并排序)-->深度剖析(二)

前言 前面介绍了冒泡排序、选择排序、插入排序、希尔排序&#xff0c;作为排序中经常用到了算法&#xff0c;还有堆排序、快速排序、归并排序 堆排序&#xff08;HeaSort&#xff09; 堆排序的概念 堆排序是一种有效的排序算法&#xff0c;它利用了完全二叉树的特性。在C语言…...

七一建党节|热烈庆祝中国共产党成立103周年!

时光荏苒&#xff0c;岁月如梭。 在这热情似火的夏日&#xff0c; 我们迎来了中国共产党成立103周年的重要时刻。 这是一个值得全体中华儿女共同铭记和庆祝的日子&#xff0c; 也是激励我们不断前进的重要时刻。 103年&#xff0c; 风雨兼程&#xff0c;砥砺前行。 从嘉兴…...

Spring Boot应用知识梳理

一.简介 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的工具。它简化了基于 Spring 的应用程序的配置和部署过程&#xff0c;提供了一种快速、便捷的方式来构建独立的、生产级别的 Spring 应用程序。 Spring Boot 的一些主要优点包括&#xff1a; 1. 简化配置…...

Spring中利用重载与静态分派

Spring中利用重载与静态分派 在Java和Spring框架中&#xff0c;重载&#xff08;Overloading&#xff09;和静态分派&#xff08;Static Dispatch&#xff09;是两个非常重要的概念&#xff0c;它们在处理类方法选择和执行过程中扮演着关键角色。本文旨在深入探讨Spring环境下…...

文本三剑客之awk:

文本三剑客awk&#xff1a; grep 查 sed 增删改查 主要&#xff1a;增改 awk 按行取列 awk awk默认的分隔符&#xff1a;空格&#xff0c;tab键&#xff0c;多个空格自动压缩为一个。 awk的工作原理&#xff1a;根据指令信息&#xff0c;逐行的读取文本内容&#xff0c;然…...

SpringSecurity-授权示例

用户基于权限进行授权 定义用户与权限 authorities()。 package com.cms.config;import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.core.userdetails.User; import…...

选哪个短剧系统源码好:全面评估与决策指南

在短剧内容创作和分享日益流行的今天&#xff0c;选择合适的短剧系统源码对于构建一个成功的短剧平台至关重要。短剧系统源码不仅关系到平台的稳定性和用户体验&#xff0c;还直接影响到内容创作者和观众的互动质量。本文将提供一份全面的评估指南&#xff0c;帮助您在众多短剧…...

AI时代的软件工程:挑战与改变

人工智能&#xff08;AI&#xff09;正以惊人的速度改变着我们的生活和工作方式。作为与AI关系最为密切的领域之一&#xff0c;软件工程正经历着深刻的转变。 1 软件工程的演变 软件工程的起源 软件工程&#xff08;Software Engineering&#xff09;是关于如何系统化、规范化地…...

Zuul介绍

Zuul 是 Netflix 开源的一个云平台网络层代理&#xff0c;它主要用于路由、负载均衡、中间件通信和动态路由。Zuul 本质上是一个基于 JVM 的网关&#xff0c;它提供了以下功能&#xff1a; 1.路由&#xff1a;Zuul 允许客户端和服务器之间的所有入站和出站请求通过一个中心化的…...

7-1作业

1.实验目的&#xff1a;完成字符收发 led.h #ifndef __GPIO_H__ #define __GPIO_H__#include "stm32mp1xx_rcc.h" #include "stm32mp1xx_gpio.h" #include "stm32mp1xx_uart.h"//RCC,GPIO,UART初始化 void init();//字符数据发送 void set_tt…...

ElasticSearch安装、配置详细步骤

一、环境及版本介绍 操作系统&#xff1a; Windows 10 软件版本&#xff1a; elasticsearch-7.17.22、kibana-7.17.22、IK-7.17.22 开发环境选择软件版本应提前考虑正式系统环境&#xff0c;否则会产生软件与服务器环境不兼容的问题出现&#xff0c;ElasticSearch与环境支持…...

【Mybatis 与 Spring】事务相关汇总

之前分享的几篇文章可以一起看&#xff0c;形成一个体系 【Mybatis】一级缓存与二级缓存源码分析与自定义二级缓存 【Spring】Spring事务相关源码分析 【Mybatis】Mybatis数据源与事务源码分析 Spring与Mybaitis融合 SpringManagedTransaction&#xff1a; org.mybatis.spri…...

Leetcode 2065. 最大化一张图中的路径价值(DFS / 最短路)

Leetcode 2065. 最大化一张图中的路径价值 暴力DFS 容易想到&#xff0c;从0点出发DFS&#xff0c;期间维护已经走过的距离&#xff08;时间&#xff09;和途径点的权值之和&#xff0c;若访问到0点则更新答案&#xff0c;若下一步的距离与已走过的距离和超出了maxTime&#…...

SeeSR: Towards Semantics-Aware Real-World Image Super-Resolution

CVPR2024 香港理工大学&OPPO&bytedancehttps://github.com/cswry/SeeSR?tabreadme-ov-file#-licensehttps://arxiv.org/pdf/2311.16518#page5.80 问题引入 因为有些LR退化情况比较严重&#xff0c;所以超分之后的结果会出现语义的不一致的情况&#xff0c;所以本文训…...

七月论文审稿GPT第5版:拿我司七月的早期paper-7方面review数据集微调LLama 3

前言 llama 3出来后&#xff0c;为了通过paper-review的数据集微调3&#xff0c;有以下各种方式 不用任何框架 工具 技术&#xff0c;直接微调原生的llama 3&#xff0c;毕竟也有8k长度了 效果不期望有多高&#xff0c;纯作为baseline通过PI&#xff0c;把llama 3的8K长度扩展…...

盘古5.0,靠什么去解最难的题?

文&#xff5c;周效敬 编&#xff5c;王一粟 当大模型的竞争开始拼落地&#xff0c;商业化在B端和C端都展开了自由生长。 在B端&#xff0c;借助云计算向千行万业扎根&#xff1b;在C端&#xff0c;通过软件App和智能终端快速迭代。 在华为&#xff0c;这家曾经以通信行业起…...

2.3章节Python中的数值类型

1.整型数值 2.浮点型数值 3.复数   Python中的数值类型清晰且丰富&#xff0c;主要分为以下几种类型&#xff0c;每种类型都有其特定的用途和特性。 一、整型数值 1.定义&#xff1a;整数类型用于表示整数值&#xff0c;如1、-5、100等。 2.特点&#xff1a; Python 3中的…...

每日Attention学习7——Frequency-Perception Module

模块出处 [link] [code] [ACM MM 23] Frequency Perception Network for Camouflaged Object Detection 模块名称 Frequency-Perception Module (FPM) 模块作用 获取频域信息&#xff0c;更好识别伪装对象 模块结构 模块代码 import torch import torch.nn as nn import to…...

【从0实现React18】 (五) 初探react mount流程 完成核心递归流程

更新流程的目的&#xff1a; 生成wip fiberNode树标记副作用flags 更新流程的步骤&#xff1a; 递&#xff1a;beginWork归&#xff1a;completeWork 在 上一节 &#xff0c;我们探讨了 React 应用在首次渲染或后续更新时的整体更新流程。在 Reconciler 工作流程中&#xff…...

0-30 VDC 稳压电源,电流控制 0.002-3 A

怎么运行的 首先&#xff0c;有一个次级绕组额定值为 24 V/3 A 的降压电源变压器&#xff0c;连接在电路输入点的引脚 1 和 2 上。&#xff08;电源输出的质量将直接影响与变压器的质量成正比&#xff09;。变压器次级绕组的交流电压经四个二极管D1-D4组成的电桥整流。桥输出端…...

HTML5+CSS3+JS小实例:图片九宫格

实例:图片九宫格 技术栈:HTML+CSS+JS 效果: 源码: 【HTML】 <!DOCTYPE html> <html lang="zh-CN"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1…...

湘潭大学软件工程数据库总结

文章目录 前言试卷结构给学弟学妹的一些参考自己的一些总结 前言 自己可能很早很早之前就准备复习了&#xff0c;但是感觉还是没有学到要点&#xff0c;主要还是没啥紧迫的压力&#xff0c;我们是三月份开学&#xff0c;那时候实验室有朋友挺认真开始学习数据库了&#xff0c;…...

Codeforces Testing Round 1 B. Right Triangles 题解 组合数学

Right Triangles 题目描述 You are given a n m nm nm field consisting only of periods (‘.’) and asterisks (‘*’). Your task is to count all right triangles with two sides parallel to the square sides, whose vertices are in the centers of ‘*’-cells. …...

怎样将word默认Microsoft Office,而不是WPS

设置——>应用——>默认应用——>选择"word"——>将doc和docx都选择Microsoft Word即可...

C语言之进程的学习2

Env环境变量&#xff08;操作系统的全局变量&#xff09;...

web使用cordova打包Andriod

一.安装Gradel 1.下载地址 Gradle Distributions 2.配置环境 3.测试是否安装成功 在cmd gradle -v 二.创建vite项目 npm init vitelatest npm install vite build 三.创建cordova项目 1.全局安装cordova npm install -g cordova 2. 创建项目 cordova create cordova-app c…...

内卷情况下,工程师也应该了解的项目管理

简介&#xff1a;大家好&#xff0c;我是程序员枫哥&#xff0c;&#x1f31f;一线互联网的IT民工、&#x1f4dd;资深面试官、&#x1f339;Java跳槽网创始人。拥有多年一线研发经验&#xff0c;曾就职过科大讯飞、美团网、平安等公司。在上海有自己小伙伴组建的副业团队&…...

【解锁未来:深入了解机器学习的核心技术与实际应用】

解锁未来&#xff1a;深入了解机器学习的核心技术与实际应用 &#x1f48e;1.引言&#x1f48e;1.1 什么是机器学习&#xff1f; &#x1f48e;2 机器学习的分类&#x1f48e;3 常用的机器学习算法&#x1f48e;3.1 线性回归&#xff08;Linear Regression&#xff09;&#x1…...

1-3.文本数据建模流程范例

文章最前&#xff1a; 我是Octopus&#xff0c;这个名字来源于我的中文名–章鱼&#xff1b;我热爱编程、热爱算法、热爱开源。所有源码在我的个人github &#xff1b;这博客是记录我学习的点点滴滴&#xff0c;如果您对 Python、Java、AI、算法有兴趣&#xff0c;可以关注我的…...

【FFmpeg】avformat_alloc_output_context2函数

【FFmpeg】avformat_alloc_output_context2函数 1.avformat_alloc_output_context21.1 初始化AVFormatContext&#xff08;avformat_alloc_context&#xff09;1.2 格式猜测&#xff08;av_guess_format&#xff09;1.2.1 遍历可用的fmt&#xff08;av_muxer_iterate&#xff0…...

Flask 缓存和信号

Flask-Caching Flask-Caching 是 Flask 的一个扩展&#xff0c;它为 Flask 应用提供了缓存支持。缓存是一种优化技术&#xff0c;可以存储那些费时且不经常改变的运算结果&#xff0c;从而加快应用的响应速度。 一、初始化配置 安装 Flask-Caching 扩展&#xff1a; pip3 i…...

基于weixin小程序农场驿站系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;农场资讯管理&#xff0c;用户管理&#xff0c;卖家管理&#xff0c;用户分享管理&#xff0c;分享类型管理&#xff0c;商品信息管理&#xff0c;商品类型管理 开发系统&#xff1a;Windows 架构模式…...

JAVA将List转成Tree树形结构数据和深度优先遍历

引言&#xff1a; 在日常开发中&#xff0c;我们经常会遇到需要将数据库中返回的数据转成树形结构的数据返回&#xff0c;或者需要对转为树结构后的数据绑定层级关系再返回&#xff0c;比如需要统计当前节点下有多少个节点等&#xff0c;因此我们需要封装一个ListToTree的工具类…...

设计模式——开闭、单一职责及里氏替换原则

设计原则是指导软件设计和开发的一系列原则&#xff0c;它们帮助开发者创建出易于维护、扩展和理解的代码。以下是你提到的几个关键设计原则的简要说明&#xff1a; 开闭原则&#xff08;Open/Closed Principle, OCP&#xff09;&#xff1a; 开闭原则由Bertrand Meyer提出&am…...

代码随想录算法训练营第59天:动态[1]

代码随想录算法训练营第59天&#xff1a;动态 两个字符串的删除操作 力扣题目链接(opens new window) 给定两个单词 word1 和 word2&#xff0c;找到使得 word1 和 word2 相同所需的最小步数&#xff0c;每步可以删除任意一个字符串中的一个字符。 示例&#xff1a; 输入: …...

jvm性能监控常用工具

在java的/bin目录下有许多java自带的工具。 我们常用的有 基础工具 jar:创建和管理jar文件 java&#xff1a;java运行工具&#xff0c;用于运行class文件或jar文件 javac&#xff1a;java的编译器 javadoc&#xff1a;java的API文档生成工具 性能监控和故障处理 jps jstat…...

ISP IC/FPGA设计-第一部分-SC130GS摄像头分析-IIC通信(1)

1.摄像头模组 SC130GS通过一个引脚&#xff08;SPI_I2C_MODE&#xff09;选择使用IIC或SPI配置接口&#xff0c;通过查看摄像头模组的原理图&#xff0c;可知是使用IIC接口&#xff1b; 通过手册可知IIC设备地址通过一个引脚控制&#xff0c;查看摄像头模组的原理图&#xff…...

Python实现万花筒效果:创造炫目的动态图案

文章目录 引言准备工作前置条件 代码实现与解析导入必要的库初始化Pygame定义绘制万花筒图案的函数主循环 完整代码 引言 万花筒效果通过反射和旋转图案创造出美丽的对称图案。在这篇博客中&#xff0c;我们将使用Python来实现一个动态的万花筒效果。通过利用Pygame库&#xf…...

合同网协议实现无人机分布式任务分配的原理介绍和代码逻辑框架

无人机任务分配领域中的合同网协议&#xff08;Contract Net Protocol, CNP&#xff09;算法是一种基于协商机制的协作方法&#xff0c;该算法模拟了人类商业活动中的招标-投标-中标过程&#xff0c;通过节点之间的招投标机制进行任务分配&#xff0c;旨在使系统以较低的代价、…...

React@16.x(43)路由v5.x(8)常见应用场景(5)- 滚动条复位

目录 1&#xff0c;滚动条复位2&#xff0c;在 React 中的触发的3种方式2.1&#xff0c;高阶组件2.2&#xff0c;useEffect2.3&#xff0c;路由守卫 1&#xff0c;滚动条复位 因为切换路由&#xff0c;页面并不会刷新&#xff0c;所以需要手动复位滚动条。实现滚动条复位是比较…...

新一代Java框架Quarkus的性能优化与应用

新一代Java框架Quarkus的性能优化与应用 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 引言 随着云原生技术的发展&#xff0c;Java开发者们对于构建轻量级、…...

【数据结构】——链表经典OJ(leetcode)

文章目录 一、 相交链表二、 反转链表三、 回文链表四、 环形链表五、 环形链表 II六、 合并两个有序链表七、 两数相加八、 删除链表的倒数第N个节点九、 随机链表的复制 一、 相交链表 双指针法 struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListN…...

C# 警告 warning MSB3884: 无法找到规则集文件“MinimumRecommendedRules.ruleset”

警告 warning MSB3884: 无法找到规则集文件“MinimumRecommendedRules.ruleset” C:\Program Files\Microsoft Visual Studio\2022\Professional\MSBuild\Current\Bin\amd64\Microsoft.CSharp.CurrentVersion.targets(129,9): warning MSB3884: 无法找到规则集文件“MinimumRe…...

这几款让人上头AO级车

在心里一直就有这几款车的位置,那就是海豚、元PLUS、元UP。这几款车虽说定位是95后、00后,其实70、80后也被深深吸引,所以说时尚没有界限,大家对美的追求都是一致的。这几款车自上市后就是炸街产品,赢得了市场的青睐。这几款车型是比亚迪细分市场后的产物,刚开始上市的时…...

必胜客之后,DQ冰淇淋也跨界卖汉堡了

汉堡界又迎来一重磅新玩家。近日,DQ冰淇淋在其官方微博、小红书等社交媒体上发文称,DQ汉堡全国首店将于7月10日登陆上海。新玩家入局同时,哈比特汉堡、摩斯汉堡等一批“老玩家”却遗憾陆续退出中国市场。汉堡界,似乎从来不缺新故事。01.冰淇淋“专家”卖汉堡29元起卖,不“…...

从29W降至17W!成豪华车“价格屠夫”,190ps配四驱,月销仅401

国内汽车市场,说到豪车那么德系奔驰绝对榜上有名,作为一线豪华品牌,奔驰曾经不管是口碑还是销量都非常棒,为广大车迷上市了很多经典的标杆车型,可以毫不夸张的说,曾经只要开着一辆奔驰车回村,即便是最紧凑型的A级车,也能带来很高的回头率,地位瞬间就不一样了,可是随着…...

【产品经理】技术知识

引言&#xff1a;        在最近频繁的产品管理职位面试中&#xff0c;我深刻体会到了作为产品经理需要的不仅仅是对市场和技术的敏锐洞察&#xff0c;更多的是在复杂多变的环境中&#xff0c;如何运用沟通、领导力和决策能力来引导产品从概念走向市场。这一系列博客将分享…...

国际儿童慈善组织:苏丹超1800万儿童失学超过一年

当地时间5月28日,国际儿童慈善组织救助儿童会发表声明称,自苏丹武装冲突爆发以来,针对苏丹学校和教育设施的暴力袭击事件增长了三倍。截至目前,苏丹国内已发生88起此类暴力事件。这些暴力袭击包括:对学校的空袭,造成师生伤亡;对教师施加酷刑,杀害和绑架老师以及在教育设…...

解读一下15.52.34.160/27

IP地址15.52.34.160/27可以分解为两部分来解读&#xff1a; IP地址: 15.52.34.160 这是分配给网络接口的地址&#xff0c;用于在网络中标识一个特定的设备。 子网掩码: /27 这表示子网掩码是27位长&#xff0c;意味着网络部分占据了IP地址的前27位&#xff0c;剩下的5位用于主…...