gcc (GNU编译器套件)

2023-11-08

gcc

 

(GNU编译器套件)

  编辑
GNU编译器套件(GNU Compiler Collection)包括 CC++Objective-CFortranJavaAdaGo语言的前端,也包括了这些语言的库(如libstdc++、libgcj等等)。GCC的初衷是为GNU操作系统专门编写的一款编译器。GNU系统是彻底的 自由软件。此处,“自由”的含义是它尊重用户的自由。 [1]  
软件名称
GNU Compiler Collection
开发商
Free Software Foundation (FSF)
软件平台
类Unix操作系统
软件语言
多国语言
软件授权
GNU通用公共许可证(GNU GPL)

创作背景编辑

GCC(GNU Compiler Collection,GNU编译器套件),是由 GNU 开发的编程语言编译器。它是以 GPL许可证所发行的自由软件,也是 GNU计划的关键部分。GCC原本作为GNU操作系统的官方编译器,现已被大多数类 Unix操作系统(如 LinuxBSDMac OS X等)采纳为标准的 编译器,GCC同样适用于微软的 Windows[2]   GCC是自由软件过程发展中的著名例子,由自由软件基金会以 GPL协议发布。
GCC 原名为 GNU C 语言编译器(GNU C Compiler),因为它原本只能处理  C语言。GCC 很快地扩展,变得可处理 C++。后来又扩展能够支持更多编程语言,如 FortranPascalObjective-CJavaAdaGo以及各类 处理器架构上的 汇编语言等,所以改名GNU编译器套件(GNU Compiler Collection)。 [2]  

结构编辑

GCC的外部接口长得像一个标准的Unix 编译器。使用者在命令列下键入gcc之程序名,以及一些命令参数,以便决定每个输入档案使用的个别语言编译器,并为输出程序码使用适合此硬件平台的组合语言编译器,并且选择性地执行连接器以制造可执行的程序。
每个语言编译器都是独立程序,此程序可处理输入的原始码,并输出组合语言码。全部的语言编译器都拥有共通的中介架构:一个前端解析符合此语言的原始码,并产生一 抽象语法树,以及一翻译此语法树成为GCC的 暂存器转换语言〈RTL〉的后端。编译器最佳化与静态程序码解析技术(例如FORTIFY_SOURCE,一个试图发现 缓冲区溢位〈buffer overflow〉的编译器)在此阶段应用于程序码上。最后,适用于此硬件架构的组合语言程序码以Jack Davidson与Chris Fraser发明的算法产出。
几乎全部的GCC都由C写成,除了Ada前端大部分以Ada写成。

前端接口

前端的功能在于产生一个可让后端处理之语法树。此语法解析器是手写之 递归语法解析器。
直到2004年,程序的语法树结构尚无法与欲产出的处理器架构脱钩。而语法树的规则有时在不同的语言前端也不一样,有些前端会提供它们特别的语法树规则。
在2005年,两种与语言脱钩的新型态语法树纳入GCC中。它们称为GENERIC与GIMPLE。语法解析变成产生与语言相关的暂时 语法树,再将它们转成GENERIC。之后再使用"gimplifier"技术降低GENERIC的复杂结构,成为一较简单的静态唯一形式(Static Single Assignment form,SSA)基础的GIMPLE形式。此形式是一个与语言和处理器架构脱钩的全域最佳化通用语言,适用于大多数的现代编程语言。

中介接口

一般 编译器作者会将语法树的最佳化放在前端,但其实此步骤并不看语言的种类而有不同,且不需要用到语法解析器。因此GCC作者们将此步骤归入通称为中介阶段的部分里。此类的最佳化包括消解死码、消解重复运算与全域数值重编码等。许多最佳化技巧也正在实作中。

后端接口

GCC后端的行为因不同的前处理器 和特定架构的功能而不同,例如不同的字符尺寸、呼叫方式与大小尾序等。后端接口的前半部利用这些讯息决定其RTL的生成形式,因此虽然GCC的RTL理论上不受 处理器影响,但在此阶段其抽象指令已被转换成目标架构的格式。
GCC的最佳化技巧依其释出版本而有很大不同,但都包含了标准的最佳化算法,例如循环最佳化、执行绪跳跃、共通程序子句消减、指令排程等等。而RTL的最佳化由于可用的情形较少,且缺乏较高阶的资讯,因此相比较起来,增加的GIMPLE语法树形式,便显得比较不重要。
后端经由一次重读取步骤后,利用描述目标处理器的 指令集时所取得的信息,将抽象 暂存器替换成 处理器的真实暂存器。此阶段非常复杂,因为它必须关注所有GCC可移植平台的处理器指令集的规格与技术细节。
后端的最后步骤相当公式化,仅仅将前一阶段得到的 汇编语言代码藉由简单的 子例程转换其暂存器与内存位置成相对应的 机器码

基本用法编辑

在使用GCC 编译器的时候,我们必须给出一系列必要的调用参数和文件名称。GCC编译器的调用参数大约有100多个,这里只介绍其中最基本、最常用的参数。具体可参考GCC Manual。
GCC最基本的用法是∶gcc [options] [filenames]
其中options就是编译器所需要的参数,filenames给出相关的文件名称。
-c,只 编译,不链接成为 可执行文件,编译器只是由输入的.c等 源代码文件生成.o为后缀的目标文件,通常用于编译不包含主程序的 子程序文件。
-o output_filename,确定输出文件的名称为output_filename,同时这个名称不能和源文件同名。如果不给出这个选项,gcc就给出预设的可执行文件a.out。
-g,产生符号调试工具(GNU的gdb)所必要的符号资讯,要想对源代码进行调试,我们就必须加入这个选项。
-O,对程序进行优化 编译、链接,采用这个选项,整个 源代码会在编译、链接过程中进行优化处理,这样产生的 可执行文件的执行效率可以提高,但是,编译、链接的速度就相应地要慢一些。
-O2,比-O更好的优化编译、链接,当然整个编译、链接过程会更慢。
-Idirname,将dirname所指出的目录加入到程序头文件目录列表中,是在 预编译过程中使用的参数。C程序中的头文件包含两种情况∶
A)#include <myinc.h>
B)#include “myinc.h”
其中,A类使用尖括号(< >),B类使用双引号(“ ”)。对于A类, 预处理程序cpp在系统预设包含 文件目录(如/usr/include)中搜寻相应的文件,而B类,预处理程序在 目标文件的文件夹内搜索相应文件。
-v gcc执行时执行的详细过程,gcc及其相关程序的版本号
原版gcc manual该选项英文解释
Print (on standard error output) the commands executed to run the stages of compilation. Also print the version number of the compiler driver program and of the preprocessor and the compiler proper.
编译程序时加上该选项可以看到gcc搜索头文件/库文件时使用的搜索路径!

基本规则编辑

gcc所遵循的部分约定规则:
.c为后缀的文件,C语言 源代码文件;
.a为后缀的文件,是由 目标文件构成的档案库文件;
.C,.cc或.cxx 为后缀的文件,是C++源代码文件且必须要经过 预处理
.h为后缀的文件,是程序所包含的 头文件
.i 为后缀的文件,是C源代码文件且不应该对其执行预处理;
.ii为后缀的文件,是C++源代码文件且不应该对其执行预处理;
.m为后缀的文件,是Objective-C源代码文件;
.mm为后缀的文件,是Objective-C++ 源代码文件;
.o为后缀的文件,是 编译后的 目标文件
.s为后缀的文件,是 汇编语言源代码文件;
.S为后缀的文件,是经过 预编译的汇编语言源代码文件。

语言支持编辑

以2006年5月24日释出的4.1.1版为准,本 编译器版本可处理下列语言:
Ada 〈GNAT〉
C 〈GCC〉
C++(G++)
Fortran 〈Fortran 77: G77, Fortran 90: GFORTRAN〉
Java 〈编译器:GCJ; 解释器:GIJ〉
Objective-C 〈GOBJC〉
Objective-C++
先前版本纳入的CHILL前端由于缺乏维护而被废弃。
Fortran前端在4.0版之前是G77,此前端仅支援Fortran 77。在本版本中,G77被废弃而采用更新的GFortran,因为此前端支援Fortran 95。
下列前端依然存在:
Modula-2
Modula-3
PL/I
Mercury

执行过程编辑

虽然我们称GCC是 C语言编译器,但使用gcc由C语言 源代码文件生成 可执行文件的过程不仅仅是编译的过程,而是要经历四个相互关联的步骤∶ 预处理(也称 预编译,Preprocessing)、 编译(Compilation)、 汇编(Assembly)和链接(Linking)。
命令gcc首先调用cpp进行预处理,在预处理过程中,对源代码文件中的文件包含(include)、预编译语句(如 定义define等)进行分析。接着调用cc1进行编译,这个阶段根据输入文件生成以.i为后缀的目标文件。汇编过程是针对汇编语言的步骤,调用as进行工作,一般来讲,.S为后缀的汇编语言 源代码文件和汇编、.s为后缀的汇编语言文件经过 预编译汇编之后都生成以.o为后缀的目标文件。当所有的 目标文件都生成之后,gcc就调用ld来完成最后的关键性工作,这个阶段就是连接。在连接阶段,所有的目标文件被安排在可执行程序中的恰当的位置,同时,该程序所调用到的 库函数也从各自所在的档案库中连到合适的地方。

执行过程示例编辑

  • 示例代码
1
2
3
4
5
6
7
#include<stdio.h>
 
int  main( void )
{
     printf ( "hello\n" );
     return  0;
}
这个过程处理 宏定义和include,并做语法检查。
可以看到 预编译后,代码从6行扩展到了910行。
1
2
3
4
5
gcc  -E a.c -o a.i
cat  a.c| wc  -l
5
cat  a.i| wc  -l
910
  • 编译过程
这个阶段,生成 汇编代码。
1
2
3
gcc  -S a.i -o a.s
cat  a.s| wc -l
59
  • 汇编过程
这个阶段,生成 目标代码
此过程生成ELF格式的目标代码。
1
2
3
gcc  -c a.s -o a.o
file  a.o
a.o:ELF64-bitLSBrelocatable,AMDx86-64,version1(SYSV),notstripped
链接过程。生成 可执行代码。链接分为两种,一种是 静态链接,另外一种是 动态链接。使用静态链接的好处是,依赖的动态链接库较少,对动态链接库的版本不会很敏感,具有较好的兼容性;缺点是生成的程序比较大。使用动态链接的好处是,生成的程序比较小,占用较少的内存。
1
gcc  a.o -o a
程序运行:
1
2
. /a
hello

处理器架构编辑

GCC4.1支持下列处理器架构:
Alpha
ARM
Atmel AVR
Blackfin
H8/300
IA-32〈x86〉 与 x86-64
IA-64例如: Itanium
MorphoSys 家族
Motorola 68000
Motorola 88000
System/370,System/390
SuperH
HC12
VAX
Renesas R8C/M16C/M32C家族
较不知名的处理器架构也在官方释出版本中支援:
A29K
ARC
C4x
CRIS
D30V
DSP16xx
FR-30
FR-V
Intel i960
IP2000
M32R
68HC11
MCORE
MN10200
MN10300
NS32K
ROMP
Stormy16
V850
Xtensa
由FSF个别维护的GCC处理器架构:
D10V
MicroBlaze
PDP-10
MSP430
Z8000
当GCC需要移植到一个新平台上,通常使用此平台固有的语言来撰写其初始阶段。

程序除错编辑

为 GCC 除错的首选工具当然是 GNU 除错器。其他特殊用途的除错工具是 Valgrind, 用以发现内存漏失 (Memory leak)。而 GNU 测量器 ( gprof) 可以得知程序中某些函式花费多少时间,以及其呼叫频率;此功能需要使用者在 编译时选定测量〈profiling〉选项。

使用技巧编辑

首先检查是否在你的机器上安装了GCC,使用命令:
可用rpm -q gcc 检查。
如果没有安装,请依序检查并安装下面各RPM
libbinutils
binutils
make
glibc-devel
gcc-cpp
gcc
看下面的例子:test.c
1
2
3
4
5
6
7
8
#include<stdio.h>
 
int  main()
{
     char  *str= "I like Linux!I advice you to join in the Linux World" ;
     printf ( "%s" ,str);
     return  0;
}
使用gcc 编译。输入gcc -c test.c得到目标文件test.o.-c命令表示对文件进行编译和 汇编。但并不连接。如果再键入gcc -o ../bin/test test.o,那么将得到名为test的 可执行文件。其实这两步可以一气呵成,gcc ../bin/test test.c.如果程序没有错误就生成了可执行文件。也许你会觉得基于命令行的 编译器比不上如VC之类的 集成开发环境,的确gcc的界面要改进,但是你一旦熟练了就会感到。gcc的效率如此之高。可以告诉大家的是Linux底下强大的C/C++集成开发环境 Kdevelop和Vc一样强大,使用了Gcc编译器。
GNU C 编译器 即gcc是一个功能强大的 ANSI C兼容编译器,你会操作其他操作系统下的一种C编译器,能很快掌握GCC.
1、使用Gcc,Gcc是基于命令行的,使用时通常后跟一些选项和文件名。Gcc的基本用法如下: gcc [options] [filenames] 命令行选项制定操作将对命令行上的每个给出的文件执行。
2、GCC的常用选项
编译选项:gcc有超过100个的编译选项可用。具体的可以使用命令man gcc察看
优化选项:用GCC 编译C/C++代码时,它会试着用最少的时间完成编译并且编译后的代码易于调试。易于调试意味着编译后的代码与 源代码有同样的执行顺序,编译后的代码没有经过优化。有很多的选项可以告诉GCC在耗费更多 编译时间和牺牲易调试性的基础上产生更小更快的 可执行文件。这些选项中最典型的就是-O和-O2。-O选项告诉gcc对源代码进行基本优化。-O2选项告诉GCC产生尽可能小的和尽可能快的代码。还有一些很特殊的选项可以通过man gcc察看。
调试和剖析选项:GCC支持数种调试剖析选项。在这些选项中最常用的是-g和-pg.-g选项告诉gcc产生能被GNU调试器(如gdb)使用的调试信息,以便调试用户的程序。-pg选项告诉gcc在用户的程序中加入额外的代码,执行时,产生 gprof用的剖析信息以显示程序的耗时情况。
3、使用gdb
使用方法:在命令行中键入gdb并按回车就可以运行gdb了,启动gdb后,能在命令行上制定很多的选项,也可以下面的方式来运行gdb: gdb filename 用这种方式运行gdb时,能直接指定想要调试的程序。在命令行上健入gdb -h得到一个有关gdb的选项的说明简单列表。
编译代码以供调试,为了使gdb工作,必须使程序在编译时包含调试信息,调试信息包含程序里的每个变量的类型,在 可执行文件里的 地址映射以及 源代码行号。gdb利用这些信息使源代码和 机器码相关联。
关于gcc的大体就写这么多吧,更多的信息可以查找帮助,记得学习Linux的一大武器man或者info命令,下次在介绍一下使用C/C++编写大型程序的 makefile文件和make命令。

版本发布编辑

2012年03月23日,GCC 首个公开发布版本是在 1987 年由 Richard Stallman 发布的,到今天已经整整 25 年了。为了庆祝 25 周年,GCC 也相应发布了 GCC 4.7.0 版本,这是 GCC 一个全新的重要版本。
GCC 4.7.0 带来了一组关于链接时优化 (LTO) 框架可提升伸缩性和降低内存使用,据开发者称,在 64 位系统上需要 8G 内存来对 Firefox 进行优化,然而用了 LTO 后只需 3G。
此外就是体验的支持软件事务内存,支持更多 C++11 标准,包括原子性、C++11 内存模型,用户定义文字、别名声明、构造器委派和可扩展的语法等。
GCC 4.7.0 还改进对  Fortran 的支持,支持 Google Go 1 等等多项改进。 [3]  
2012年06月14日,GCC 4.7.1 发布了,这是一个 bug 修复版本,主要是 4.7.0 中的一些回归测试发现的问题修复。 [4]  
2013年04月11日,GCC 4.7.3 发布。
2013年03月22日,GCC 4.8.0发布,进一步加强了对已C++11的支持。并且G++开始支持-std=c++1y选项,用来支持计划于2014年发布的C++11修订版标准(C++14)。 [5]  
2013年10月16日,GCC 4.8.2发布。提供了对于OpenMP 4.0的支持。
2014年04月22日,GCC发布了4.9.0版本,提供了对 C11标准的Generic Selection语法特性(_Generic)的支持以及对多线程方面特性的支持。

linux中安装编辑

RedHat中安装

用which gcc命令查看,假如有显示” /usr/bin/gcc”的话说明已经安装了,否则就是没有安装。
这里以redhat 64位 linux为例。首先将redhat的iso系统镜像挂在到/mnt/cdrom目录下:
  mount -o loop /data/rhel-server-5.4-x86_64-dvd.iso /mnt/cdrom
  进入/mnt/cdrom目录,就可以访问iso镜像中的内容了。
  cd /mnt/cdrom
  cd Server/
安装gcc的依赖包以及gcc,按以下命令依次执行:
  rpm -ivh binutils-2.17.50.0.6-12.el5.x86_64.rpm
  rpm -ivh cpp-4.1.2-46.el5.x86_64.rpm
  rpm -ivh kernel-headers-2.6.18-164.el5.x86_64.rpm
  rpm -ivh glibc-devel-2.5-42.x86_64.rpm
  rpm -ivh glibc-headers-2.5-42.x86_64.rpm
  rpm -ivh libgomp-4.4.0-6.el5.x86_64.rpm
  rpm -ivh gcc-4.1.2-46.el5.x86_64.rpm
  大家在安装rpm包时,由于依赖关系,在安装时会提示“此包依赖其他包xx”,让你先安装其他包,总之大家按照提示来,提示你先安装哪个包就安装哪个包。

Ubuntu中安装

安装4.8版为例:
sudo apt-get install gcc-4.8
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

gcc (GNU编译器套件) 的相关文章

  • 启动 GDB 调试

    使用 GDB 调试程序一般有三种方式 gdb filename gdb attach pid gdb filename corename 这也对应着本节课的核心内容 直接调试目标程序 附加进程 调试 core 文件 接下来我们逐一讲解 直接
  • Vim重复命令

    1 vim重复命令 重复执行上次命令 普通模式下输入 x 删除第一个字符 然后输入 会再次删除一个字符 重复了 x 的操作 执行指定次数相同的命令 普通模式下输入 N N表示重复后面的次数 例如 输入10x 删除10个连续字符 输入3dd
  • Jquery水平滚动字幕(marquee效果)

    水平滚动字幕 html div class txt scroll div class scrollbox div class txt div div div css txt scroll width 100 line height 1rem
  • VS或者Qt调用外部动态链接库dll的方法

    1 VS调用外部动态链接库dll的方法 Windows 1 1 建立一个Win32控制台应用程序 1 2 如果搭建的是64位应用 需将平台调整为x64 1 3 将程序源码和头文件 动态链接库和静态连接库拷贝到项目对应的文件夹中 1 4 将上
  • Spring依赖注入和控制反转

    文章目录 1 依赖注入 1 1 依赖注入和控制反转的概念 1 2 依赖注入的实现方式 1 3 控制反转的具体实现 1 4 依赖注入的具体实现 1 5 依赖注入和控制反转总结 1 依赖注入 1 1 依赖注入和控制反转的概念 依赖注入 Depe
  • 前后端分离(axios发送数据请求,路由导航守卫,web会话跟踪,token)

    目录 1 前端登录发起请求 a 在 main js 中配置 axios b 组装请求数据 3 连接数据库 4 后端响应 5 前端处理 6 来到main组件时 需在前端判断用户是否登录 7 web会话跟踪技术 token 8 响应拦截器 9
  • os.path.expanduser

    path os path expanduser linux系统path为 home newt windows系统path为 C Users newt 其中newt为我的用户名
  • XSS攻击修改服务器的代码,XSS攻击的定义,类型以及防御方法

    经常跟大家讲 CC攻击 好像还没有给大家分享过XSS攻击它的类型怎么去防御 今天云都小编就带大家了解下 什么是XSS攻击 XXS 攻击全称跨站脚本攻击 是一种在Web应用中的计算机安全漏洞 它允许恶意Web用户将代码植入到提供给其他使用的页
  • 《机器学习》实验五:实现K-means聚类

    机器学习 实验五 实现K means聚类 机器学习 实验五 实现K means聚类 实验目的 实验原理 实验内容与要求 实验器材 设备 元器件 实验步骤 心得体会 机器学习 实验五 实现K means聚类 实验目的 了解聚类的基本概念 掌握
  • javascript对象小探之三——undefined和undeclared

    一 undefined undefined是javascript的一个数据类型对象 var i 那么i的值就是undefined 二 undeclared undeclared是一种语法错误 不是数据类型 不要误会了 但是js引擎不会报错
  • R语言学习笔记(三)数据处理

    本文的示例数据框集 egData 如下 值标签 if FALSE 值标签 levels代表变量实际值 labels代表标签值 egData sex lt factor egData sex levels c 1 2 labels c mal
  • WSL2+Docker+IDEA一站式开发调试

    WSL2 Docker IDEA一站式开发调试 将就看吧 不知道为什么CSDN无法转储并展示jsdelivr的图片 但博客园正常展示 前言 我们知道 Docker是一个容器引擎 对于开发者来说 使用Dokcer容器部署各种开发需要的中间件
  • linux端口开放指定端口的两种方法

    开放端口的方法 方法一 命令行方式 1 开放端口命令 sbin iptables I INPUT p tcp dport 8080 j ACCEPT 2 保存 etc rc d init d iptables save 3 重启服务 etc
  • 正则表达式和三剑客

    正则表达式与三剑客 Linux正则表达式 由一类特殊字符及文本字符所编写的模式 其中有些字符不表示其字面意义 而是用于表示控制或通配符的功能 分两类 基本正则表达式 BRE 扩展正则表达式 ERE 基本正则表达式DRE集合 元字符 作用 只
  • ROS环境搭建步骤总结

    ROS环境搭建踩坑总结 Ubuntu 16 04安装ROS Kinetic ROS安装 进入到 ROS官网选择安装的版本和系统 配置Ubuntu的repositories 以允许 restricted universe 和 multiver
  • vue element el-select下拉选择不回显问题

    el select下拉选择无效 问题描述 在使用Vue开发使用element ui时 el select下拉框出现在点击选择的时候数据无法显示的问题
  • MMX及SSE优化--SSE篇

    上回讲到针对整数运算的MMX优化技术 然而真正大运算量的图形和声音处理大都用的是浮点运算 而且现在对浮点运算的要求也是越来越高 在这样一个条件下INTEL终于在Pentium III处理中增加针对浮点运算优化的SSE指令 所以所有用过SSE
  • 初学者适合什么副业?适合初学者做的8个副业

    有网友曾说过 安全感是主业给的 但财富是靠副业创造的 可见 找一份靠谱的副业是多么的重要 但是 想找一份靠谱的副业 特别难 尤其是以前没有了解过的 看到各种副业吹嘘 根本无法下手 今天 聪少就给大家分享几个适合新手的副业 帮助大家快速走上副
  • 基于SpringBoot的外卖点餐管理系统

    项目背景 随着科学技术的飞速发展 各行各业都在努力与现代先进技术接轨 通过科技手段提高自身的优势社会的发展和科学技术的进步 互联网技术越来越受欢迎 网络计算机的生活方式逐渐受到广大人民群众的喜爱 也逐渐进入了每个用户的使用 互联网具有便利性
  • 基于STM32CUBEMX,HAL库蓝牙通信

    蓝牙通信 实现手机与stm32连接 1 准备工作 蓝牙模块HC 05模块 安卓APP软件 HC 05蓝牙模块支持AT指令 要进入AT指令模式 需要先按住蓝牙模块上的按键 接通电源 当模块上的LED灯进入慢闪后再松开按键 此时已经进入AT指令

随机推荐

  • vue-cli3.0引入高德地图3d效果两种方法+实例+填坑

    前言 因为项目需要引入高德地图的3d效果 找了很多资料 在这里记录下方法和实例组件 注意 因为两个方法代码量都特别大 这里分2个页面详细说一下 方法一是链接出去专门说 最下面有更多资料 高德3d官网地址和别的资料地址 方法一 使用官方案例
  • 掌握Python的X篇_32_使用python编辑pdf文件_pdfrw

    本篇介绍利用python操作pdf文件 我们平时也会有合并和拆分pdf的需求 此时我们就可以使用本节内容 文章目录 1 pdfrw的安装 2 切分pdf文件 3 pdfrw官网及实现一版四面的实例 1 pdfrw的安装 pip instal
  • React中函数组件和类式组件

    React中函数组件和类式组件 定义组件有两个要求 组件名称必须以大写字母开头 组件的返回值只能有一个根元素 1 函数组件 函数组件也称无状态组件 顾名思义就是通过函数编写的形式去实现一个React组件 是React中定义组件最简单的方式
  • 字符串 - 二进制和文本字符串 - 探究

    1 应用场景 主要用于探究字符串中的二进制和文本字符串 以及它们的区别和应用场景 2 学习 操作 1 文档阅读 重要来自于与chatgpt的对话问答 以及其他技术文章 2 整理输出 2 1 是什么 二进制和文本字符串都是计算机中常用的数据类
  • 相机触发模式

    一 图像采集模式分类 相机的图像采集模式分为内触发模式与外触发模式 其中内触发模式包含连续采集 单帧采集两种形式 外触发模式包含软件触发 硬件外触发 本文以海康相机的软件平台作介绍 该软件去海康机器人官网下载 内触发模式与外触发模式可以通过
  • matlab 降维工具

    降维工具箱drtool 这个工具箱的 主页如下 现在的最新版本是2013 3 21更新 版本v0 8 1b http homepage tudelft nl 19j49 Matlab Toolbox for Dimensionality R
  • 系统服务器地云盘上,系统服务器地云盘上

    系统服务器地云盘上 内容精选 换一换 磁盘增强型弹性云服务器自带高存储带宽和IOPS的本地盘 具有高存储IOPS以及读写带宽的优势 同时 本地盘的价格更加低廉 在海量数据存储场景下 具备更高的性价比 磁盘增强型弹性云服务器具备如下特点 本地
  • 依赖注入之@Value原理(整体流程)

    Autowired等注解 Spring依赖注入之 Autowired Qualifier Primary Priority注解用法 Spring依赖注入之 Autowired Qualifier Primary Priority注解原理 上
  • win10 蓝牙耳机已连接但是耳机仍没有声音,音频仍是扬声器输出问题的出现条件及解决方案

    此问题可能分电脑分耳机类型出现 本人因耳机Fill CC2连接笔记本频繁出现此问题故以此文记录 问题出现原因 疑似 1 笔记本后台挂的程序应用过多 且笔记本开机通电时间过长 2 连接蓝牙耳机时笔记本扬声器正在发声 解决方法 27条消息 wi
  • 【xgboost】贝叶斯自动调参代码

    工作中 很多场景下会用到xgboost模型 如风控 催收 营销 推荐等待 在用xgboost模型进行模型训练的时候 也经常用贝叶斯自动调参来搜索最优的参数 现在把相关的代码贴出来 供大家参考 目前是支持了xgboost和lightgbm模型
  • VS2010安装失败解决办法

    1 运行regedit打开注册表 2 找到HKEY LOCAL MACHINE SOFWARE Microsoft Internet Explorer MAIN 3 MAIN子键的权限问题 修改成 允许完全控制 MAIN子键点击右键里弹出权
  • 解决Vue引入百度地图JSSDK:BMap is undefined 问题

    百度地图官网文档介绍使用JSSDK时 仅提供了三种引入方式 script引入 异步加载 npm install vue baidu map save 或 cnpm install vue baidu map save 全局引入 但vue项目
  • 每天一练——斐波那契数列前N项之和

    什么是斐波那契数列 斐波那契数列就是前两项之和会等于第三项 斐波那契数列通常以一为起始 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 正如我所说的前两项之和会等于第三项以此类推 那么
  • 【Unity3D】Unity5.6的Mecanim Animator动画系统结合MMD4Mecanim插件舞蹈动画

    1 下载MMD4Mecanim 官网 http stereoarts jp 我用的是最新版的MMD4Mecanim Beta 20170423 zip Unity是5 6 0版本的 2 解压后导入MMD4Mecanim unitypacka
  • 打印机漏洞(rce)

    20210510 0 出发 在翻阅论文的时候 突然想起来之前的时候 看到过一些打印机的漏洞 然后就在谷歌上搜索了一下 printer rce 然后找到了这篇文章 A Sheep in Wolf s Clothing Finding RCE
  • 老鸟重写程序需要准备点什么

    整体来说 老鸟工作已久 对语言 架构 算法 性能 安全 业务 各类型特点会掌控能力更高 但是年久未动手 不免生疏 为此专门整理需要的基本内容 可以抽空回味一下 在紧急上手之后 两周内查缺补漏 区别与新手面对任何问题的一脸懵逼 老鸟对所有技术
  • Redis配置优化

    Redis Redis 远程字典服务器 是一个开源的 使用c语言编写的NoSQL数据库 Redis 基于内存运行并支持持久化 采用key value 键值对 的存储形式 是目前分布式架构中不可或缺的一环 Redis服务器程序是单进程模型 也
  • 21世纪的管理挑战

    朋友很早前推荐看的德鲁克系列 最近在孔网搞到了 顺便在此记录读书笔记和想法 如下 第一章 管理的新范式 管理是企业管理 新学科 公共管理 不同组织的任务和挑战也不存在巨大的差异 企业必须具有一个恰当的组织形式 组织不是绝对的 它是提高人们在
  • 科学计数法 C语言

    题目 科学计数法是科学家用来表示很大或很小的数字的一种方便的方法 其满足正则表达式 1 9 0 9 E 0 9 即数字的整数部分只有 1 位 小数部分至少有 1 位 该数字及其指数部分的正负号即使对正数也必定明确给出 现以科学计数法的格式给
  • gcc (GNU编译器套件)

    gcc GNU编译器套件 编辑 GNU编译器套件 GNU Compiler Collection 包括 C C Objective C Fortran Java Ada和 Go语言的前端 也包括了这些语言的库 如libstdc libgcj