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

C语言预处理

预处理

C语言的编译步骤

  1. 预处理
  2. 编译
  3. 汇编
  4. 链接

C语言的预处理

预处理就是在源文件编译之前,所进行的一部分预备操作,这部分操作是由预处理程序自动完成;当源文件在编译时,编译器会自动调用预处理程序来完成预处理操作执行的解析,预处理执行解析完成才能进入下一步的编译过程。

gcc 源文件 -E -o 程序名.[后缀]

预处理功能

宏定义
  • 不带参数的宏定义

    • 语法

      #define 宏名 常量数据
      
    • 宏定义的预处理机制:此时的预处理只做数据替换,不做类型检查

    • 注意:定义的宏不会占用内存空间,还未进入编译环节->运行。我们在编译前已经将宏名替换成了常量数据

    • 宏展开:在预编译时将宏名替换成字符串的过程称为"宏展开"。这里的常量数据是一个不带双引号的字符串

      案例

      #include <stdio.h>
      #define PI 3.1415926int main()
      {float l,s,r,v;printf("请输入圆的半径:\n");scanf("%f",&r);//计算周长l = 2 * PI * r;//计算面积s = PI * r * r;printf("l=%10.4f\ns=%10.4f",l,s);return 0;
      }
      
  • 带参数的宏定义

    • 语法:

      #define 宏名(参数列表) 参数表达式
      
    • 面试题

    #define multi(a,b) a * b
    
    • 实现
    # include <stdio.h>
    #define multi(a,b) a * bint main()
    {int result = multi(7+2,3);printf("%d\n",result);//13return 0;
    }
    
  • 宏定义的作用域

    • #define命令出现在程序中函数的外面,宏名的有效范围为定义命令之后到本源文件结束。#define写在文件开头,函数之前,作为文件一部分,在此文件范围内有效。
    • 可以有#undef命令终止宏定义

    案例

    # include <stdio.h>
    #define PI 3.14
    #define DAY 20void fun()
    {float r = 4;float s = PI * r * r;int day = DAY;
    }
    #undef PI//终止PI范围
    void fun1()
    {float r = 4;float s = PI * r * r;int day = DAY;
    }int main()
    {fun();fun1();  return 0;
    }
    
  • 在宏定义中引用已定义的宏名

    • 案例
    #include <stdio.h>
    #define R 3.0
    #define PI 3.14
    #define L 2*PI*R
    #dedine S PI*R*Rint main()
    {printf("%f,%f",L,S);return 0;
    }
    

文件包含

概念

所谓的文件包含处理是指一个源文件可以将另一个源文件的全部包含进来。这个适用于多文件开发。通常,一个常规的C语言程序会包含多个源码文件(*.c),当某些公共资源需要再各个源码文件中使用,为了避免多次编写相同的代码,我们会进行代码抽取(*.c),并提供公共的访问文件(*.h),然后再各个源码文件中直接包含即可。

*.h中的函数申明必须要在*.c中有对应的函数定义(函数的实现),否则没有意义。

头文件(.h)的内容
  • 头文件中所存放的内容,就是各个源码文件的彼此可见的公共资源。
    1. 全局变量的声明
    2. 普通函数的声明
    3. 静态函数的定义
    4. 宏定义
    5. 结构体、联合体的定义
    6. 枚举常量列表的定义
    7. 其他头文件
  • 实例
//head.hextern int global;//全局变量
extern void f1();//普通函数的声明
static void f2();//静态函数定义
{...;
}
#define max(a,b) ((a)>(b)?(a):(b))//宏定义
struct Mod	//结构体定义
{...;
};union Ater	//联合体定义
{...;
};#include <stdio.h>//其他头文件-系统库文件
#include "mylib.h"//其他头文件-自定义文件
  • 特别说明:

    1. 全局变量、普通函数的定义一般出现在某个源文件(*.c*.cpp)中,其他源文件想要使用都需要进行声明,因此放在头文件更方便
    2. 静态函数、宏定义、结构体、联合体的定义都只能在其所在的文件可见因此多个源文件需要,放到头文件中定义更为方便、安全
  • 文件包含预处理机制

    此时的预处理,是将文件中的内容替换,文件包含指令

包含方式
  1. #include <xxx.h>

    系统会到标准文件目录(liunx下/user/include)查找包含文件

  2. #include "xxx.h"

    在工程路径下查找,若未找到仍然去标准库文件目录查找

案例

myhead.h

#ifndef _MYHEAD_H
#define _MYHEAD_H
// 数组的累加和计算
extern int sum(const int *, int);
// extern int sum(const int *p,int len);
#endif //_MYHEAD_H

myhead.c

#include "myhead.h"
int sum(const int *p, int len)
{int sum = 0;register int i = 0;for (; i < len; i++){sum += *(p + i);}return sum;
}

app.c

#include <stdio.h>
#include "myhead.h"
int main(int argc, char *argv[])
{int arr[5] = {12, 13, 14, 15, 16};int res = sum(arr, 5);printf("数组累加和的结果是:%d\n", res);return 0;
}

多文件编译命令

gcc app.c myhead.c -o app
条件编译

概念:根据设定的条件选择待选择编译的语句代码。

条件编译预处理机制:将满足条件的语句进行保留,不满足条件的语句进行删除,交给下一步编译

语法

  1. 语法一

    #ifdef 标识	//判断标识符是否定义(定义为真,未定义为假)
    ..
    #else
    ..
    #endif
    
  2. 语法二

    #ifndef 标识	//判断标识符是否定义(未定义为真,定义为假)
    ..
    #else
    ..
    #endif
    
  3. 语法三

    #if  表达式  //判断表达式的结果(成立为真,不成立为假)
    ..
    #else
    ..
    #endif    
    

    案例

    #include <stdio.h>
    #define LETTER 0
    int main(int argc, char *argv[])
    {// 测试用的字母字符char str[20] = "C Language";char c;int i = 0;while ((c = str[i]) != '\0'){i++;
    #if LETTERif (c >= 'a' && c <= 'z'){c -= 32;}
    #elseif (c >= 'A' && c <= 'Z'){c += 32;}
    #endifprintf("%c", c);}printf("\n");return 0;
    }
    

避免头文件重复包含的方法

由于头文件包含指令#include的本质是复制粘贴,并且一个头文件可以嵌套包含其他头文件,因为很容易出现:头文件重复包含

语法:

#ifndef __XXXX_H //一般取头文件名称的大写
#define __XXXX_H
...
#endif

相关文章:

C语言预处理

预处理 C语言的编译步骤 预处理编译汇编链接 C语言的预处理 预处理就是在源文件编译之前&#xff0c;所进行的一部分预备操作&#xff0c;这部分操作是由预处理程序自动完成&#xff1b;当源文件在编译时&#xff0c;编译器会自动调用预处理程序来完成预处理操作执行的解析…...

DPIN基金会在曼谷发布全球去中心化GPU算力网络计划

12月12日&#xff0c;DPIN基金会在泰国曼谷举行的“DPIN—AIDePIN全球共识发布会”上&#xff0c;展示了其构建全球去中心化GPU算力网络的宏伟蓝图与愿景。DPIN基金会致力于开发一个基于人工智能与去中心化物理基础设施网络&#xff08;DePIN&#xff09;的高性能计算平台&…...

ONNX Runtime gpu版本安装

ONNX Runtime版本与cudatoolkit版本对应关系&#xff1a;NVIDIA - CUDA | onnxruntime onnx runtime发的版本&#xff1a;Releases microsoft/onnxruntime onnx runtime 官网&#xff1a;ONNX Runtime | Home onnx和onnx runtime版本对应关系&#xff1a;Compatibility | o…...

深入理解 MVCC 与 BufferPool 缓存机制

深入理解 MVCC 与 BufferPool 缓存机制 在 MySQL 数据库中&#xff0c;MVCC&#xff08;Multi-Version Concurrency Control&#xff09;多版本并发控制机制和 BufferPool 缓存机制是非常重要的概念&#xff0c;它们对于保证数据的一致性、并发性以及提升数据库性能起着关键作用…...

RockyLinux介绍及初始化

文章目录 一、背景二、下载 RockyLinux9 镜像三、环境初始化四、安装 Docker 环境 一、背景 这里讲一个小故事&#xff1a; 我们都知道Linux 内核是由芬兰计算机科学家林纳斯托瓦兹 (Linus Torvalds) 于 1991 年首次开发的&#xff0c;随后有一个非常重要的公司RetHat成立&am…...

Python中切片操作符

在Python中&#xff0c;切片是一种操作符&#xff0c;允许你获取序列&#xff08;如列表、元组、字符串&#xff09;的一部分。切片操作返回序列的一个子集&#xff0c;这个子集是一个新的对象&#xff0c;与原始序列是独立的。切片操作通常用于列表、元组、字符串等。 切片语…...

python -【es】基本使用

一. 前言 在Python中使用Elasticsearch&#xff08;ES&#xff09;通常涉及安装Elasticsearch的Python客户端库&#xff0c;然后通过该库与Elasticsearch集群进行交互。 二. 基本使用 1. 安装Elasticsearch Python客户端库 首先&#xff0c;你需要安装elasticsearch库。你可…...

JVM实战—5.G1垃圾回收器的原理和调优

大纲 1.G1垃圾回收器的工作原理 2.G1分代回收原理—性能为何比传统GC好 3.使用G1垃圾回收器时应如何设置参数 4.如何基于G1垃圾回收器优化性能 5.问题汇总 1.G1垃圾回收器的工作原理 (1)ParNew CMS的组合有哪些痛点 (2)G1垃圾回收器 (3)G1如何实现垃圾回收的停顿时间是…...

Python爬虫(selenium)从网站获取信息并存入数据库(mysql)

简介&#xff1a; 在本篇博客中&#xff0c;我们将介绍如何使用Python编写一个简单的网络爬虫&#xff0c;从指定网站上获取图书信息&#xff0c;并将这些信息存入数据库。这个项目涉及到Python编程、selenium爬虫技术以及数据库操作等内容&#xff0c;适合对这些领域感兴趣的初…...

spring中使用@Validated,什么是JSR 303数据校验,spring boot中怎么使用数据校验

文章目录 一、JSR 303后台数据校验1.1 什么是 JSR303&#xff1f;1.2 为什么使用 JSR 303&#xff1f; 二、Spring Boot 中使用数据校验2.1 基本注解校验2.1.1 使用步骤2.1.2 举例Valid注解全局统一异常处理 2.2 分组校验2.2.1 使用步骤2.2.2 举例Validated注解Validated和Vali…...

RabbitMQ中的异步Confirm模式:提升消息可靠性的利器

在现代分布式系统中&#xff0c;消息队列&#xff08;Message Queue&#xff09;扮演着至关重要的角色&#xff0c;它能够解耦系统组件、提高系统的可扩展性和可靠性。RabbitMQ作为一款广泛使用的消息队列中间件&#xff0c;提供了多种机制来确保消息的可靠传递。其中&#xff…...

C++ 设计模式:代理模式(Proxy Pattern)

链接&#xff1a;C 设计模式 链接&#xff1a;C 设计模式 - 门面模式 链接&#xff1a;C 设计模式 - 中介者 链接&#xff1a;C 设计模式 - 适配器 代理模式&#xff08;Proxy Pattern&#xff09;是一种结构型设计模式&#xff0c;它为其他对象提供一种代理以控制&#xff08…...

41.1 预聚合提速实战项目之需求分析和架构设计

本节重点介绍 : 需求分析架构设计 需求分析 使用预聚合提速查询并且降低高基数查询对后端的压力用户无需变更grafana上的查询语句&#xff0c;后端自动替换效果图 架构设计 架构图 解决方案说明 heavy_query对用户侧表现为查询速度慢在服务端会导致资源占用过多甚至打挂…...

学习路之VScode--自定义按键写注释(插件)

1. 安装 "KoroFileHeader" 插件 首先&#xff0c;在 VScode 中搜索并安装名为 "KoroFileHeader" 的插件。你可以通过在扩展商店中搜索插件名称来找到并安装它。 2. 进入 VScode 设置页面 点击 VScode 左下角的设置图标&#xff0c;然后选择 "设置&q…...

Web安全 - “Referrer Policy“ Security 头值不安全

文章目录 概述原因分析风险说明Referrer-Policy 头配置选项1. 不安全的策略no-referrer-when-downgradeunsafe-url 2. 安全的策略no-referreroriginorigin-when-cross-originsame-originstrict-originstrict-origin-when-cross-origin 推荐配置Nginx 配置示例 在 Nginx 中配置 …...

Milvus×EasyAi:如何用java从零搭建人脸识别应用

如何从零搭建一个人脸识别应用&#xff1f;不妨试试原生Java人工智能算法&#xff1a;EasyAi Milvus 的组合拳。 本文将使用到的软件和工具包括&#xff1a; EasyAi&#xff1a;人脸特征向量提取Milvus&#xff1a;向量数据库用于高效存储和检索数据。 01. EasyAi&#xff1a;…...

CGAL windows 安装教程

1.下载源代码 CGAL官网下载https://github.com/CGAL/cgal/releases 2.下载boost库 BOOST官网下载https://www.boost.org/ 3.下载 GMP and MPFR 4.配置VS2022 头文件&#xff1a; 库路径 做完以上步骤&#xff0c;可以使用CGAL了&#xff01;...

低代码开源项目Joget的研究——Joget8社区版安装部署

大纲 环境准备安装必要软件配置Java配置JAVA_HOME配置Java软链安装三方库 获取源码配置MySql数据库创建用户创建数据库导入初始数据 配置数据库连接配置sessionFactory&#xff08;非必须&#xff0c;如果后续保存再配置&#xff09;编译下载tomcat启动下载aspectjweaver移动jw…...

【Ubuntu 20.4安装截图软件 flameshot 】

步骤一&#xff1a; 安装命令&#xff1a; sudo apt-get install flameshot 步骤二&#xff1a; 设置快捷方式&#xff1a; Ubuntu20.4 设置菜单&#xff0c;点击 号 步骤三&#xff1a; 输入软件名称&#xff0c; 软件快捷命令&#xff08;flameshot gui&#xff09;&am…...

AUTOSAR 平台介绍 (R24-11新标准发布!)

AUTOSAR 平台介绍——R24-11 0引言 随着技术的不断进步和市场需求的变化,AUTOSAR在汽车行业中的重要性日益增强。R24-11版本作为AUTOSAR平台的重要更新,旨在提升系统性能、安全性和用户体验。本文将详细介绍R24-11版本的主要更新内容 1 AUTOSAR介绍 AUTOSAR汽车软件架构,旨…...

Framework开发入门(一)之源码下载

一、使用Linux操作系统的小伙伴可以跳转到官网链接按提示操作 官网源码地址&#xff1a;下载源代码 | Android Open Source Project 1.创建一个空目录来存放您的工作文件。为其指定一个您喜欢的任意名称&#xff1a; mkdir WORKING_DIRECTORYcdWORKING_DIRECTORY …...

CentOS7下的 OpenSSH 服务器和客户端

目录 1. 在 IP 地址为 192.168.98.11 的 Linux 主机上安装 OpenSSH 服务器&#xff1b; 2. 激活 OpenSSH 服务&#xff0c;并设置开机启动&#xff1b; 3. 在 IP 地址为 192.168.98.22 的 Linux 主机上安装 OpenSSH 客户端&#xff0c;使用客户端命令&#xff08;ssh、 scp、…...

rocketmq5--(三)--broker发送消息给消费者

202412/30回过头来记录一下&#xff1a;之前一直找不到在哪里把消息丢给消费者&#xff08;2024/11/23&#xff09;&#xff0c;找了很久都没找到&#xff0c;就放弃了&#xff0c;然后发现&#xff0c;我靠原来是在poplongpollingservice里。。。。还是乱打断点&#xff0c;偶…...

QComboBox中使用树形控件进行选择

事情是这样的&#xff0c;要在一个ComboBox中通过树形结构进行内容的选择。 默认的QComboBox展开是下拉的列表。因此需要定制一下。 效果就是这样的 实现上面效果的核心代码就是下面这样的 MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { treenew…...

单片机中运行多个定时器

在单片机的裸机编程环境中&#xff0c;同时运行多个定时器是完全可行的&#xff0c;但需要注意一些关键点以确保系统的稳定性和效率。以下是一些考虑因素和实现方法&#xff1a; 1. 硬件支持 定时器数量&#xff1a;首先确认您的单片机是否具备足够的定时器资源。大多数现代…...

go 模拟TCP粘包和拆包,及解决方法

1. 什么是 TCP 粘包与拆包&#xff1f; 粘包&#xff08;Sticky Packet&#xff09; 粘包是指在发送多个小的数据包时&#xff0c;接收端会将这些数据包合并成一个数据包接收。由于 TCP 是面向流的协议&#xff0c;它并不会在每次数据发送时附加边界信息。所以当多个数据包按顺…...

论文笔记PhotoReg: Photometrically Registering 3D Gaussian Splatting Models

1.abstract 最近推出的3D高斯飞溅(3DGS)&#xff0c;它用多达数百万个原始椭球体来描述场景&#xff0c;可以实时渲染。3DGS迅速声名鹊起。然而&#xff0c;一个关键的悬而未决的问题仍然存在&#xff1a;我们如何将多个3DG融合到一个连贯的模型中&#xff1f;解决这个问题将使…...

宝塔服务器安装备份配置

1.服务器下载安装宝塔功能 if [ -f /usr/bin/curl ];then curl -sSO https://download.bt.cn/install/install_panel.sh;else wget -O install_panel.sh https://download.bt.cn/install/install_panel.sh;fi;bash install_panel.sh ed8484bec执行后选择y 等待下载完成会给出…...

ubuntu22 安装CUDA

在Ubuntu系统中&#xff0c;使用nvidia-smi命令可以看到当前GPU信息&#xff0c;在右上角可以看到CUDA Version&#xff0c;意思是最大支持的CUDA版本号。 安装下载 CUDA Toolkit 11.6 Downloads | NVIDIA Developer https://developer.nvidia.com/cuda-downloads?target_osL…...

LabVIEW故障诊断中的无故障数据怎么办

在使用LabVIEW进行故障诊断时&#xff0c;可能会面临“无故障数据”的情况。这种情况下&#xff0c;缺乏明确的故障参考&#xff0c;使得系统难以通过传统对比法进行故障识别。本文将介绍应对无故障数据的关键策略&#xff0c;包括数据模拟、特征提取和基于机器学习的方法&…...

开发模式选择与最佳实践指南20241230

开发模式选择与最佳实践指南 引言 在现代软件开发中&#xff0c;选择合适的开发模式直接影响项目的开发效率和质量。本文将帮助您&#xff1a; &#x1f3af; 了解三种主流开发模式的优缺点&#x1f4a1; 根据项目特点选择最适合的开发模式&#x1f527; 掌握混合开发模式的…...

超详细!一文搞定PID!嵌入式STM32-PID位置环和速度环

本文目录 一、知识点1. PID是什么&#xff1f;2. 积分限幅--用于限制无限累加的积分项3. 输出值限幅--用于任何pid的输出4. PID工程 二、各类PID1. 位置式PID&#xff08;用于位置环&#xff09;&#xff08;1&#xff09;公式&#xff08;2&#xff09;代码使用代码 2. 增量式…...

Redhat7 PCS建立无共享存储浮动地址集群

更新记录 日期版本号内容9/22/2024Ver 1.0重新排版修正 0写在前面 0.1 简述 时间有限使用VMware6.7环境使用Centos7.8最小化安装方式&#xff08;不用配置本地yum仓库&#xff09;注意查看主机名&#xff08;主机双机操作&#xff0c;部分单机操作&#xff09; 序号HostIPAd…...

爱思唯尔word模板

爱思唯尔word模板 有时候并不一定非得latex https://download.csdn.net/download/qq_38998213/90199214 参考文献书签链接...

交换机Vlan中 tagged和untagged的区别

pvid&#xff0c;tagged与untagged pvid是交换机一个端口上的id&#xff0c;一个端口只能有一个pvid&#xff0c;多个端口可以有相同的pvid。 一&#xff1a;接收数据 Untagged&#xff1a;不管收到的数据帧是否已经有VLAN标记&#xff0c;将数据帧中的vlan标记修改为自己的pvi…...

软件需求分析期末知识点整理

前言&#xff1a;本文为wk学子量身打造&#xff0c;帮助大家少挂科。主要根据ls的会议进行整理。懂得都懂。 重点还是多看看课本 第2章 需求获取的方法 第3章 3.1.2 控制需求(案例*2) 第4章 4.3 范式 第5章 5.2.3 原子功能(案例) 5.2.4 划分功能(案例)5.3.3 工作流图(画图) 第…...

PyAudio使用手册

PyAudio 是一个功能强大的 Python 库&#xff0c;用于在 Python 中进行音频输入和输出操作 1. 安装 在使用 PyAudio 之前&#xff0c;需要先安装它。可以使用 pip 进行安装&#xff1a; pip install pyaudio在某些系统&#xff08;如 Ubuntu&#xff09;上&#xff0c;可能还需…...

总结TCP/IP四层模型

总结TCP/IP四层模型 阅读目录(Content) 一、TCP/IP参考模型概述 1.1、TCP/IP参考模型的层次结构二、TCP/IP四层功能概述 2.1、主机到网络层  2.2、网络互连层  2.3、传输层  2.3、应用层 三、TCP/IP报文格式 3.1、IP报文格式3.2、TCP数据段格式3.3、UDP数据段格式3.4、套…...

《深入挖掘Python加解密:自定义加密算法的设计与实现》

利用python实现加解密 在正式编写各种加解密前&#xff0c;我们先写个小案例&#xff0c;如下。 封面在文末呦&#xff01; 基础加解密-源码 # 加密 def encode():source01 乐茵for c in source01:ascii01 ord(c)ascii01 1print(chr(ascii01), end)# 解密 def decode():…...

【前端,TypeScript】TypeScript速成(六):函数

函数 函数的定义 定义一个最简单的加法函数&#xff1a; function add(a: number, b: number): number {return a b }&#xff08;可以看到 JavaScript/TypeScript 的语法与 Golang 也非常的相似&#xff09; 调用该函数&#xff1a; console.log(add(2, 3)) // out [LOG…...

Python中元组(tuple)内置的数据类型

在Python中&#xff0c;元组&#xff08;tuple&#xff09;是一种内置的数据类型&#xff0c;用于存储不可变的有序元素集合。元组在很多方面与列表&#xff08;list&#xff09;相似&#xff0c;但它们之间存在一些关键的区别。以下是关于Python元组的详细解释&#xff1a; 定…...

AI安全的挑战:如何让人工智能变得更加可信

引言 随着人工智能&#xff08;AI&#xff09;技术在各个领域的广泛应用&#xff0c;尤其是在医疗、金融、自动驾驶和智能制造等行业&#xff0c;AI正在重塑我们的工作和生活方式。从提高生产效率到实现个性化服务&#xff0c;AI带来了前所未有的便利。然而&#xff0c;在享受这…...

redis用途都有哪些

Redis&#xff0c;作为一个开源的高性能键值对数据库&#xff0c;其用途广泛且功能强大。 1. 缓存&#xff08;Caching&#xff09;&#xff1a; • Redis常被用作缓存层&#xff0c;存储那些频繁访问但不易改变的数据&#xff0c;如用户会话、商品详情等。 • 通过将这些数据存…...

【Django篇】--动手实现路由模块化与路由反转

一、路由模块化 在一个Django项目中&#xff0c;由于功能类别不同&#xff0c;因此需要将不同功能进行模块化设计。在Django项目中模块化设计则需要将不同模块封装为对应的app模块&#xff0c;每一个模块中涉及到的路由则也需要进行模块化设计&#xff0c;才能更好的让整个项目…...

自研国产零依赖前端UI框架实战008 用户表单以及随机ID

前言 通过前面的努力,我们的组件已经越来越多了,我们的功能也越来越完善. 不过我们的新增用户的功能还没有做. 接下来, 就让我们实现新增用户的功能. 显示新增用户的表单 首先, 我们先把新增用户的表单显示出来. 我们可以复用之前的组件. <zdp_button1 text"新增…...

【数据结构-单调队列】力扣LCR 184. 设计自助结算系统

请设计一个自助结账系统&#xff0c;该系统需要通过一个队列来模拟顾客通过购物车的结算过程&#xff0c;需要实现的功能有&#xff1a; get_max()&#xff1a;获取结算商品中的最高价格&#xff0c;如果队列为空&#xff0c;则返回 -1 add(value)&#xff1a;将价格为 value …...

项目管理和协作平台Maintainer、Guest、Reporter、Owner 和 Developer 是常见的用户角色

在项目管理和协作平台上&#xff0c;Maintainer、Guest、Reporter、Owner 和 Developer 是常见的用户角色&#xff0c;每个角色有不同的权限和责任。以下是这些角色的详细区别&#xff1a; 1. Guest&#xff08;访客&#xff09; 权限&#xff1a;最低级别的权限。访问&#…...

探索电商数据:爬取不同平台商品信息的Python实践

在数字化时代&#xff0c;电商平台的商品信息成为了宝贵的数据资源。除了亚马逊&#xff0c;全球还有许多电商平台的商品信息值得爬取。本文将介绍几个值得关注的电商平台&#xff0c;并提供Python代码示例&#xff0c;展示如何爬取这些平台的商品信息。 1. 京东 (JD.com) 京…...

Autoware Universe 安装记录

前提&#xff1a; ubuntu20.04&#xff0c;英伟达显卡。 演示&#xff1a;https://www.bilibili.com/video/BV1z4CbYFEwr/?spm_id_from333.337.search-card.all.click ROS2-Galactic安装 wget http://fishros.com/install -O fishros && . fishros 选择galactic(R…...

CAT3D: Create Anything in 3D with Multi-View Diffusion Models 论文解读

24年5月的论文&#xff0c;上一版就是ReconFusion 目录 一、概述 二、相关工作 1、2D先验 2、相机条件下的2D先验 3、多视角先验 4、视频先验 5、前馈方法 三、Method 1、多视角扩散模型 2、新视角生成 3、3D重建 一、概述 该论文提出一种CAT3D方法&#xff0c;实现…...