C/C++基础知识(最终篇)

MAC+VS Code+C/C++调试配置 MAC+VS Code+C/C++调试配置 第二篇博客啦,这一篇博客接着上篇没有写完的内容,继续跟大家安利颜值无敌高的VS Code。 由于自己的小白本质,在配置VS Code的C/C++环境时,很多事情并不清楚,第一次虽然配置成功了,但是后来自己又想重新整理一下工作区的文件,结果越理越乱,索性将整个文件夹删了(无奈脸),结果后来重新调试一直不成功,然后自己又有点强迫症,就一定想要配置好,结果... 阅读详情
int a=0;自动变量a,再次调用时重新分配储存空间,即0
static int b=1;静态变量b,再次调用保留原值,即b不为1
//auto、register表示自动存储
  自动存储是变量的默认状态
//extern、static表示静态存储
  extern为全局说明的标识符
  static在第一次调用后,变量变为上次退出函数的值,函数退出后,系统保持其存储空间和数值
当局部变量与全局变量同名时,在块内,全局变量被屏蔽,要在块内访问全局变量,可以用作用域运算符”:: ”,全局变量说明时默认初始值为0


C语言的特性:强大的控制结构、快速、紧凑的代码——程序更小、可移植性、灵活性、面向编程人员和高效性,
缺点:太过于自由,可能会犯难以发现的编程错误。


现代计算机可分为几个部件。中央处理单元(或称CPU)担负着绝大部分的计算工作,
随机访问存储器(或称RAM)作为一个工作区来保存程序和文件;永久存储器,一般是硬盘,
即使在计算机关机时也能记下程序和文件;还有各种外围设备(如键盘,鼠标和监视器)用来提供人与计算机之间的通信。CPU负责处理程序。


PS: 为什么不内置输入输出语句
  也许你想知道为什么不自动包含像输入输出这样基本的语句。
一个答案是并非所有的程序都要用到 I/O(输入/输出)包,并且 C语言的一个基本设计原则是避免不必要的成分。
这个经济地使用资源的原则使得 C语言在嵌入式编程中非常流行,例如,为一个控制自动燃料系统的芯片编写程序。
顺便说一句,#include 甚至不是 C语言的语句!第一列中的 #号表明这一行是在编译器接手之前由 C预处理处理的语句。
以后你将碰到更多预处理器指令的例子,第16章“C预处理器和C库”将对它们做更详细的讲解。


PS: 位,字节和字
  术语:位,字节和字 用于描述计算机数据单位或机存储单位。这里主要指存储单位。
   最小的存储单位称为 位(bit)。它可以容纳两个值(0或1)之一(或者可以称该位置被置为“关”或“开”)。
不能在一个位中存储更多的信息,但是计算机中包含数量极其众多的位。位是计算机存储的基本单位。
   

字节(Byte)是常用的计算机存储单位。几乎对于所有的机器,1个字节均为 8位。
这是字节的标准定义,至少在衡量存储单位时是这样(C语言中对此有不同的定义,请参见本章“使用字符:char类型”小节)。
由于每个位或者是0 或者是1,所以一个 8位的字节包含 256(2 的 8次方)种可能的 0,1组合。
这些组合中可以用于表示 0 到 255的整数或者一组字符。
这种表示可以通过二进制编码(仅用0或1 方便地表示数字)来实现(第15章“位操作”将讨论二进制编码)。
  对于一种给定的计算机设计,字(word)是自然的存储单位。对于8位微机,比如原始的 Apple机,一个字正好有8位。
使用80286处理器的早期 IBM兼容机是 16位机,这意味着一个字的大小为 16位。
基于 Pentium 的 PC机和 Macintosh PowerPC 中的字是32位。更强大的计算机可以有 64位甚至更长位数的字。


六. 显示八进制数和十六进制数
  C既允许你使用 3种数制书写数字也允许以这 3种数制显示数字。要用八进制而不是十进制显示数字,请用%o (字母o)。
要显示十六进制整数,请使用 %x 。如果想显示 C语言前缀,可以使用说明符 %#o, %#x 和 %#X 分别生成 0,0x,0X 前缀。


终止程序执行:
abort(void);    需要头文件stdlib.h
cassert(a);   判断a的值,若为false,则终止程序执行,需要头文件cassert
exit(status);  status为整型常量,终止程序时把它作为退出代码操作系统,通常为0或1,可省略,需要头文件stdlib.h


头文件stdlib.h调用随机函数,time.h把日期和时间转换为字符串,
srand(int(time(0)));//srand每次运行程序产生的随机数是固定的,但srand(int(time(0)))表示不固定。
time(0)为函数,0表示不存储秒数,以当前时间对应int值为随机序列起点,每次运行时,由于起点不同可得到不同的随机数


char weight; char name[40];请注意,在scanf()中,weight使用了&前缀,而name却没有使用(正如你所见,&weight和name都是地址)
对于scanf(“%s”,&name)的输入:Hilary Bubbles,sacnf只读取了Hilary Bubbles的名字Hilary。
scanf()开始读取输入以后,会在遇到的第一个空白字符空格(blank)、制表符(tab)或者换行符(newline)处停止读取。
因此,读到Hilary Bubbles中的空格时,就停止了扫描。一般情况下,使用%s的scanf()只会把一个单词而不是整个语句作为字符串读入。
C使用其他读取输入函数(例如gets())来处理一般的字符串。


Sizeof运算符提供的数目比strlen()大1,这是因为它把用来标志字符串结束的不可见的空字符也计算在内。
还有一点,sizeof是否使用圆括号取决于是想获取一个类型的大小还是想获取某个具体量的大小。
圆括号对于类型是必需的,而对于具体量则是可选的。也就是说,应该使用sizeof(char)或sizeof(float),
但是可以使用sizeof name或者是sizeof 6.28。不过在所有情况下都使用圆括号会更好,例如sizeof(6.28)。
char str[20]="0123456789";
int a=strlen(str); //a=10;
int b=sizeof(str); //而b=20;


printf()函数也有一个返回值可作参数传递,它返回所打印的字符的数目(包括空格和不可见的换行字符如\n算两个)。
如果有输出错误,那么printf()会返回一个负数。
printf()里的输出太多,一行放不下的解决方法:
1、     使用多个printf()语句
printf(“HERE’S ONE WAY TO PRINT A ”);
printf(“LONG STRING.\N”);
2、     用反斜杠符号和回车键组合来结束第一行,但下一行要紧接在最左边
printf(“HERE’S ONE WAY TO PRINT A \
LONG STRING.\N”);
3、     采用字符串连接的方法,仅用空白字符分隔
printf(“HERE’S ONE WAY TO PRINT A “
“LONG STRING.\N”);



~scanf与scanf("")!=EOF效果一样

scanf()函数允许把普通字符放在格式字符串中。除了空格字符之外的普通字符一定要与输入字符串准确匹配。
例如,如果无意间把逗号放在两个说明之间:
scanf(“%d, %d”,&m,&n);
scanf()函数将其解释成,你将键入一个数字,键入一个逗号,然后再键入一个数字。
scanf()函数返回成功读入的项目的个数,
如果它没有读取任何项目(当它期望一个数字而你却键入了一个非数字字符串时就会发生这种情况),scanf()会返回0。
*在scanf和printf中可跳过一个项目,例如:
(%*d,&m,&n)则m不操作,%d作用于n。
ch=getchar();   等同于   scanf(“%c”,&ch);
putchar(ch);   等同于   printf(“%c”,ch);
getche()用于回显的或不回显的非缓冲输入,该函数需要调用头文件conio.h
例如:char a;                        char a;
          a=getche();                  a=getchar();
          puts("");                     puts("");
          putchar(a);                  putchar(a);
putche()函数在键入1之后,想继续键入时,它就直接开始输出了,没法像putchar()那样键入到缓冲区,而且没换行


指定初始化(需要C99版本才可使用)
  int a[6]={[5]=212};
等同于int a[6]={0,0,0,0,0,212};
一种错误:对未初始化的指针取值
int *pt;
*pt=5;
第二行表示把数值5存储在pt所指向的地址。但是由于pt没有被初始化,因此它的值是随机的,不知道5被存储到什么位置。
这个位置也许对系统危害不大,但也许会覆盖程序数据或代码,甚至导致程序的崩溃。
切记:当创建一个指针时,系统只分配了用来存储指针本身的内存空间,并不分配用来存储数据的内存空间。
因此在使用指针之前,必须给它赋予一个已分配的内存地址。
比如,可以把一个已存在的变量地址赋给指针(当你使用带有一个指针参量的函数时,就属于这种情况)。
或者使用函数malloc()来首先分配内存。
例如:int *pt;
          pt=(int*)malloc(sizeof(int));
     *pt=5;
      printf("%d\n",*pt); //若不带*号,输出为地址
指向多维数组的指针:
int (*pz)[2];  //pt指向一个包含2个int值的数组
该语句表明pz是指向包含两个int值得数组的指针
int *pax[2]; 
首先方括号和pax结合,表示pax是包含两个某种元素的数组。然后和*结合,表示pax是两个指针组成的数组。
最后,用int来定义,表示pax是由两个指向int值的指针构成的数组。这种声明会创建两个指向单个int值的指针。


gets()函数从系统的标准输入设备(通常键盘)获得一个字符串,没有预定的长度,
所以gets()需要知道输入何时结束。解决方法是读字符串直到遇到一个换行字符(\n),按回车键可以产生这个字符。
它读取换行符之前(不包括换行符)的所有字符,在这些字符后添加一个空字符(\0),然后把这个字符串交给调用它的程序。
gets()函数有两个可能的返回值。如果一切都顺利,它返回的是读入字符串的地址。
如果出错或者遇到文件结尾,它就返回一个空(或0)地址,称为空指针(NULL)。
可用while(gets(name)!=NULL)来输入
gets()的一个不足是它不检查预留存储区是否能够容纳实际输入的数据。多出来的字符简单溢出到相邻的内存区。
fgets()改进了这个问题,fgets(name,MAX,stdin);第二个参数为说明最大读入字符数,stdin(standard input)从键盘上读数据。
另外,fgets还存储了换行符到字符串中,这样每次显示字符串时就会显示换行符。
scanf()函数若使用了指定字段宽度的字符串输入,例如%10s,scanf()就会读入10个字符或者直到遇到第一个空白字符。
puts()显示字符串时自动在其后添加一个换行符,所以printf(“\n”)等同于puts(“”)
要在一行里显示多个不同字符,最好使用printf()。
puts()遇到空字符时就会停下来,所以应该确保有空字符的存在。同样为了改进,fputs(line,stdout)并不为输出自动添加换行符。
putchar(*string++);记住,++比*的优先级高,这意味着putchar(*string++)输出string的值,
然后再增加string本身,而不是增加string指向的字符。
使用const char *string代替const char string[]时,*string的实参不一定是数组。
strncat(string1,string2,MAX);由于strcat并不检查第一个字符串是否能容纳第二个字符串,所以strncat进行了改进。
同样,strncmp(list[i],”astro”,5)可以限定搜索前5个字符。还有strncpy()需要添加可复制的最大字符数。
sprint()可以把几个元素组合成一个字符串,sprintf()的第一个参数是目标字符串地址,其余的参数和printf()一样。
它写到字符串里,而不会写到输出显示中。
例如:sprintf(string1,”%s,%-19s:$%6.2f\n”,a,b,c);
char *strchr(const char *s,int c);
该函数返回一个指向字符串s中存放字符c的第一个位置的指针(标志结束的空字符是字符串的一部分,因此也可以搜索到它)。
如果没找到该字符,函数就会返回空字符。
char *strpbrk(const char *s1,const char *s2);
该函数返回一个指针,指向字符串s1中存放s2字符串中任何一个字符的第一个位置。如果没找到任何字符,函数就返回空指针。
char *strrchr(const char *s,int c);
该函数返回一个指针,指向字符串s中字符c最后一次出现的地方(标志结束的空字符是字符串的一部分,因此也可以搜索到它)。
如果没找到该字符,函数就会返回空字符。
char *strstr(const char *s1,const char *s2);
该函数返回一个指针,指向s1字符串中第一次出现s2字符串的地方。如果在s1中没找到s2字符串,函数就返回空指针。

main()可以没有参数,或者有两个参数(有些更多)。有两个参数时,第一个参数是命令行中的字符串数。
按照惯例(但不是必须的),这个int参数被称为argc(代表argument count)。
系统使用空格判断一个字符串结束,另一个字符串开始。第二个参数是一个指向字符串的指针数组。
命令行中的每个字符串被存储在内存中,并且分配一个指针指向它。按照惯例(但不是必须的),这个指针数组被称为argv(代表argument value)。

头文件<stdlib.h>
atoi()函数(代表alphanumeric to integer),如果数字是整型,可以把字符串转换成整型。
例如:atoi(“42regular”)返回整数42
同样还有atof()转成double,atol()转成long
还有比较复杂的strtol()转成long,strtod()转成double,
strtoul()转成unsigned long
当然也有itoa()和ftoa()函数把整数和浮点数转换成字符串,如果要求兼容性更好,可以使用sprintf函数来完成。

volatile的意思是告诉编译器,在编程源代码时,对这个变量不要使用优化。
在一般的程序设计中,如:
int *a;
return (*a) * (*a);这种情况。
通常编译器为了减少存储器的读写时间,会把代码优化为:
int *a; int b; int c;
c = *a;

b=*a;
return b * c;
因为外部存储器的读写速度肯定赶不上内存的读写速度,这样可以省一次外部存储器的读取时间,从而提高速度。
如果把int *a改为volatile int* a编译器就不会自动把它优化掉了。
在整个运算过程中,对变量*a的值读取了两次。防止因变量*a的值在这一期间发生了改变,而导致程序结果的错误。

restrict

      restrict是c99引入的,它只可以用于限定指针,并表明指针是访问一个数据对象的唯一且初始的方式,考虑下面的例子:

1

2

3

int ar[10];

int * restrict restar=(int *)malloc(10*sizeof(int));

int *par=ar;

这里说明restar是访问由malloc()分配的内存的唯一且初始的方式。par就不是了。那么:

1

2

3

4

5

6

7

8

for(n=0;n<10;n++)

{

   par[n]+=5;

   restar[n]+=5;

   ar[n]*=2;

   par[n]+=3;

   restar[n]+=3;

}

因为restar是访问分配的内存的唯一且初始的方式,那么编译器可以将上述对restar的操作进行优化:restar[n]+=8;。

而par并不是访问数组ar的唯一方式,因此并不能进行下面的优化:par[n]+=8;。

因为在par[n]+=3前,ar[n]*=2进行了改变。使用了关键字restric,编译器就可以放心地进行优化了。

这个关键字据说来源于古老的FORTRAN。

寄存器变量:例:register int i;
通常变量存储在计算机内存中,如果幸运,寄存器变量可以被存储在CPU寄存器中,
或更一般的,存储在速度最快的可用内存中,从而比普通变量更快地被访问和操作。
因为寄存器变量多是存放在一个寄存器中而非内存中,所以无法获得寄存器变量的地址。
通过extern可以获知外部变量


函数malloc()接受一个参数:所需内存字节数。然后malloc找到可用内存中一个大小合适的块。
内存是匿名的,也就是说,它分配了内存,但没有为它指定名字。然而,它却可以返回那块内存第一个字节的地址。
因此,可以把那个地址赋值给一个指针变量,并使用该指针来访问那块内存。若找不到所需的内存,它将返回空指针。
函数free()释放malloc分配的内存,它只释放它的参数所指向的内存块。使用它并不是必须的,
因为在程序终止后所有已分配的内存都将被自动释放。但对于动态变量十分重要,否则容易造成内存溢出而泄露。
函数calloc()与malloc类似,它接受两个参数,第一个是所需内存单元的数量,第二个是每个单元以字节计的大小,
例如:mem=(long*)calloc(100,sizeof(long));
fprintf(stderr, "Cancel Operating.\n");不仅可以组合字符串,而且使用stderr可以直接把组合的字符串输出到屏幕

首先, malloc是一个库函数,返回值是void *形式的,而new是一个运算符,返回值类型与new的对象/变量的指针相同。

       其次,new和delete的实现实际上是调用了malloc/free的。

       最后,介绍最重要的,对于非内部类型来说, malloc是不能满足要求的,

因为malloc只是分配堆内存(不会调用构造函数),而new是分配且内存且在此创建一个对象(会调用构造函数)。

所以malloc加上string会出错,因为它无法初始化,无法调用string的构造函数,因此需要改用new来使用。

用#if  0
  ………..
 #endif             的方式作注释会比较安全


数据结构(尤其是栈)应该尽可能地在自然边界上对齐。原因在于,为了访问

未对齐的内存,处理器需要作两次内存访问;而对齐的内存访问仅需要一次访问。

 

vscode的c/c++配置 首先,下载两个插件 c/c++和Code Runner,缺一不可。 然后打开一个工作区(可以提前在文件夹中编辑好类似的目录) 接下来,在练习下新建一个helloWorld.cpp的文件 可以在里面输入如下代码 #include<iostream> using namespace std; int main(void) { cout<<"hello world"; return 0; } 接下来点击运行或者点击播放符号 然后系统会生成一个 阅读详情

相关推荐

【数据库】“SQLite”+“DEV-CPP”实现C/C++嵌入式编程操作数据库

正如题目所言,最近笔者需要完成一个的任务,要求使用编程语言,由于笔者用不习惯系列软件,遂选用作为开发工具,由于之前没有相关经验,踩了许多坑,特此记录SQLite+DEV-CPP实现C/C++嵌入式编程操作数据库过程。...

TangPlusHPC的博客 4357

static的详细使用方法及例题

static的详细使用方法及例题

努力 1088

C/C++之cpp变exe

C/C++之cpp变exe 上节我们讲了C/C++的命名空间。 本节我们来介绍如何把源代码转换成软件。也就是标题所说的cpp变exe。 大家在使用vs等IDE的时候是不是发现很方便,只要写完源码,源码没错误的情况下,点一下生成就会得到可执行文件(exe)。 但是大家有没有想过其中的原理是怎么样的呢。所以本节通过这一点来展开做介绍。 点击生成解决方案就可以快速获得可执行文件,细心的同学可能会发现项目的Debug或者Release文件夹中,会有需多奇怪后缀的文件。例如我拿上节的方案Debug目录中的文

qq_44989173的博客 9538

C++ 语法篇之 static 用法

这周的大部分时间都花了debug上,,在费了一番周折才debug成功之后发现原来是static局部变量搞得鬼。我意识到原来我对于static的用法理解地还不够透彻,所以想结合这个例子再总结一下。希望在今后的coding中,不在同一个地方跌倒。 下边是错误代码的示例: Class A{ int foo1(int a); }; int A::foo1(int a){ static int i = A_ARRAY[a]; // int i = A_ARRAY[a]; // 业务代码若

yixiwuha的博客 2321

C/Cpp环境安装与配置

C/Cpp环境安装与配置 1. VS2019的安装与使用 Visual Studio 2019点击链接下载 下载后的软件安装,请各位自行百度,这里不再做详细的介绍! 下面介绍如何使用并运行基本的C/C++程序吧。 (1)点击创建新项目 (2)选则空项目 (3)配置项目名和项目的路径,并点击创建 创建完成后: (4)在源文件中创建一个C文件程序: 选中源文件,右键选则添加新建项 创建新的C程序文件: (5)创建完成后,输入并运行相关代码 注意: (1)解决输入函数scanf的问题,参考:C

A_S_F的博客 1336

stable-diffusion.cpp: 纯C/C++实现的Stable Diffusion推理引擎

stable-diffusion.cpp为Stable Diffusion的部署和应用提供了一个高效、灵活的解决方案。随着社区的不断贡献和改进,相信stable-diffusion.cpp会在未来为更多Stable Diffusion的应用场景提供强大支持。stable-diffusion.cpp是一个纯C/C++实现的Stable Diffusion推理引擎,旨在提供一个轻量级、高性能、跨平台的Stable Diffusion部署方案。

helloaiworld的博客 2163

【003 关键字】static关键字在C语言和C++中的使用及区别

一、总述 由于C++兼容C语言,所以static在C语言中的用法对于C++是同样适用的。两者的不同就是C++中多出来的特性,而这些特性与C++面线对象的特性有关。 二、static在C语言中的作用(C++通用) 1、修饰变量 a、修饰全局变量(全局变量与静态全局变量的对比) 修饰全局变量:作用域仅限于变量被定义的文件中,其他文件即使用extern声明也无法直接使用此变量,extern用法详见这里。(可以间接访问,即通过本文件的非static函数返回static变量的值,类似于C++类中的priv.

kashine的博客 3447

AD学习笔记(一)基础认识

文章目录AD学习笔记第一讲 AD基础认识一、两库两图(分别对应下图)1、PCB图(pcbdoc)2、原理图(schdoc)3、原理图库(schlib)4、PCB库(pcblib)二、封装1、DIP封装2、LQFP封装三、绘制整体流程1、建立工程(PrjPcb)2、建立两库两图并保存整个工程(五次)3、从库中提取绘制原理图4、原理图导入pcb图5、根据原理图布线6、pcb图交由工厂打板 AD学习笔记 第一讲 AD基础认识 一、两库两图(分别对应下图) PCB图(pcbdoc) 原理图(schdoc) PCB库

qq_52465473的博客 6686

C++中static关键字的作用

在C语言中static的作用如下第一、在修饰变量的时候,static修饰的静态局部变量只执行一次,而且延长了局部变量的生命周期,直到程序运行结束以后才释放。 第二、static修饰全局变量的时候,这个全局变量只能在本文件中访问,不能在其它文件中访问,即便是extern外部声明也不可以。 第三、static修饰一个函数,则这个函数的只能在本文件中调用,不能被其他文件调用。Static修饰的局部变量

Zxn、Sirius荣耀之路 1616

后向投影算法(BPA)-SAR成像算法系列(二)

SAR成像算法:后向投影算法(BPA)原理介绍及实现步骤解析。

yjh_2019的博客 1万+

# 执行 DISM 命令时出错 87 未在此上下文中识别出 restorehealth 选项。解决方法

# 执行 DISM 命令时出错 87 未在此上下文中识别出 restorehealth 选项。解决方法

段子手168的博客 1万+

static

int sum(int a) {    auto int c=0;    static int b=3;  c+=1;  b+=2;  return(a+b+c); }  void main() {    int I;  int a=2;  for(I=0;I {  

谢文浩博客 708

wsl2内核版本和模块版本不一致解决方法

** /lib/modules/…build: No such file or directory错误解决办法这篇文章历时1个月整,从4月5日一直到5月5日,这一问题才得以解决。

m0_60634555的博客 5103

在VScode下配置C/C++环境(tasks.json、launch.json、c_cpp_properties.json)

tasks.json在编译首先运行hello.c文件(点击右上角的运行图标),再点击"C/C++:gcc.exe生成和调试活动文件",如图2所示。图2 运行当前活动文件经过步骤1,在工作区code文件夹下可以生成一个文件,如下图3所示。除了tasks.json配置文件外,launch.json、c_cpp_properties.json配置文件也放在.vscode文件夹下。图3 产生的tasks.json文件tasks.json文件配置内容如下。在配置路径时只能使用\\或隔开目录。"tasks": [

m0_46610658的博客 3万+

从梯度泄露到数据复原:DLG与iDLG算法实战解析

本文深入解析了DLG与iDLG算法在梯度泄露与数据复原中的实战应用,揭示了联邦学习中的隐私风险。通过详细代码示例和实验数据,展示了如何从梯度中复原原始训练数据,并探讨了梯度压缩、差分隐私等防御措施。文章特别强调了iDLG算法在标签破解中的高效性,为AI安全领域提供了重要参考。

weixin_30552811的博客 191

在 ABAP 世界把 SAML 2.0 玩明白:跨域 SSO 的通信模式、配置路径与落地实践

摘要 SAML 2.0是ABAP平台实现标准化SSO的推荐方案,提供Front-Channel(浏览器传递SAML报文)和Back-Channel(使用工件绑定通过SOAP兑换断言)两种通信方式。前者包括HTTP Redirect和POST绑定,后者通过Artifact绑定提升安全性。配置重点包括:激活ICF服务、使用SAML2事务码建立信任、设置用户标识映射、选择绑定方式(POST易调试、Artifact更安全)及配置安全策略(签名/加密)。典型流程包括SP-initiated和IdP-initiated

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 291

C/C++语言篇

本系列文章初衷是为了整理出最全面最详细的C/C++后端开发面经,非常适用于想走后端/软件开发的同学!本面经不仅仅是简单问答,而是帮你深入理解和掌握知识点,其中一些晦涩难懂的知识点,全都用案例和代码帮你彻底掌握。本篇主要是针对C++语言相关部分的知识点展开详细的讲解,包括C/C++语法部分、底层原理、类和对象、STL容器和算法、C++新特性、设计模式、以及各种细节题等。

weixin_46571171的博客 3209

petalinux2022.2启动文件编译配置

petalinux2021之前的版本里,导入目录components/yocto/下的“environment-setup-aarch64-xilinx-linux” 和 “layers/core/oe-init-build-env”的环境,能使用Yocto的devtool工具。(加入下面内容,先petalinux-build下载完成后才能有源码)制作 BOOT.BIN 启动文件:petalinux-package --boot --fsbl --fpga --u-boot --force。

wangjie36的博客 1388

VSCode配置C/C++环境

VSCode配置C/C++环境

5万+

Simulink开发项1000例实战专栏--实例148:构建一个完整的电动汽车电池SOH评估仿真模型,包括电池建模模块、数据采集模块、SOH估算算法模块以及性能评估模块

电动汽车的动力电池是其核心部件,而电池的健康状态(State of Health, SOH)直接影响车辆的续航能力和使用寿命。SOH通常定义为当前电池容量与初始容量的比值,用百分比表示。通过基于MATLAB/Simulink平台的SOH评估仿真,可以实时监测电池的退化情况,并为电池管理系统(BMS)提供决策依据。本项目旨在构建一个完整的电动汽车电池SOH评估仿真模型,包括电池建模模块、数据采集模块、SOH估算算法模块以及性能评估模块,并通过仿真验证SOH评估的准确性。

xiaoheshang_123的博客 341

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

【C++干货篇】——C/C++内存管理

malloc:分配未初始化内存。calloc:分配并初始化为零的内存。realloc:改变已有内存块的大小,并可能移动内存块。使用这些函数时,记得调用free来释放不再需要的内存,以防止内存泄漏。int main()//只申请空间//申请空间+调用构造函数//没有默认构造可以自己传参//可以调用默认构造free(p1);//只释放空间//调用析构函数+释放空间delete p2;

zoelinkailuo的博客 2764

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

【Cpp】C和C++混合编程

一、混合编程杂绪 1.1 为什么需要混合编程 Cpp是从C演变过来的,C有很多优秀成熟项目和库,没必要在C++中重写,C++程序可以直接调用调用 庞大项目划分后一部分适合用C(底层),一部分适合用C++(中间层、上层) 1.2 混合编程的支撑 编译型程序的编译过程:源文件->目标(库)文件->可执行程序->镜像文件 任何编程语言执行时都必须是可执行程序,所以都必须先被编译成...

baymaxly的博客 7731

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

【C/Cpp】在C中的Cpp

由于我们对Cpp的框架还不够了解,在此我这一篇章进行对Cpp语法的拆分(没错,这个Cpp的坑也算是填起来了),Cpp对于学过C的人来说好像似曾相识,两种差别并不是很多,但是为何Cpp有了如此高效的效率?Cpp对C的特征进行了一些修改,Cpp更为复杂的特性将会在后面中介绍。数据类型(datatype)定义使用存储空间(内存)的方式。通过定义数据类型,告诉编译器怎样创建一片特定的存储空间,以及怎样操纵这片存储空间。数据类型可以是内部的或抽象的。内部数据类型是编译器本来能理解的数据类型,直接与编译器关联。C和。

Mongxin_Chan的博客 1352

C/C++基础知识

3.signed char:有符号char(-128~127)2.unsigned char:无符号char(0~255)3.动态分配内存(malloc和new)1.静态分配,编译时在栈上分配好内存。4.自动分配,在局部函数中。1.char:标准类型。

m0_67582670的博客 3056

【C/C++】C/C++基础知识

C/C++基础知识,包括输入输出方法、字符串长度求法、结构体数组排序等。

zhousanguhe的博客 851

C/C++开发环境

如同, 缺少了对cJSON的编译,这里对成员函数的所需的c/cpp文件未被编译。也就是按单文件编译方法对多文件进行编译。解决办法:在tasks.jason 中设置源文件,将"args"的值语言CC++C/C++这里的 ${fileDirname} 表示当前目录。

Watom_663的博客 3288
上一篇: C++操作MySQL大量数据插入效率低下的解决方法
下一篇: python3比python2慢(leetcode体验)
流左沙
博客等级 码龄11年 46粉丝 55原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值