![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C语言
英雄的小白
IC设计验证; C/C++;嵌入式软件;linux系统
展开
-
编码规范学习笔记(九)
1、 三思而后行(需求分析迭代、技术难点、编程语言选择、设计)2、 伪代码编程(注释规范)3、 防御性编程4、 变量定义初始化与命名原创 2021-04-08 17:58:14 · 141 阅读 · 0 评论 -
C语言时间超时设置
关于C语言超时时间的设置问题,废话不多说,直接上代码#include <stdio.h>#include <sys/time.h> void main(){ int time_use=0; struct timeval start; struct timeval end;//struct timezone tz; gettimeofday(&start,NULL); //gettimeofday(&start,&tz); wh原创 2021-01-28 10:54:15 · 4188 阅读 · 0 评论 -
编译指定库路径与程序运行指定库路径的异同
关于编译指定库路径与程序运行指定库路径很多初学者理解有误,现通过下面的例子来更直观的说明问题主程序#include <stdio.h>#include "add.h"int main(){ int a = 10; int b = 10; printf("%d\n",add(a,b));}libadd.so的内容#include "add.h"int add(int m,int n){ int s = m + n; return s;}原创 2020-11-13 17:19:17 · 506 阅读 · 0 评论 -
变长结构体之结构体指针申请内存
什么叫变长结构体?typedef struct { int a; char b[0];}Student;那结构体是怎么实现可变长的呢?如上所示,请注意看结构体中的最后一个元素,一个没有元素的数组。我们可以通过动态开辟一个比结构体大的空间,然后让buffer去指向那些额外的空间,这样就可以实现可变长的结构体了。下面我们来探讨动态开辟一个比结构体大的空间的问题,一般的实现思路都是开辟一个比结构体大的空间,如下:#include <stdio.h>#include原创 2020-10-20 10:41:27 · 608 阅读 · 0 评论 -
一种特殊的指针
char *str = “hello C language”; str是个指针, 为什么后面是个字符串 不是字符串的地址呢?这一句话表示,定义了一直指针变量str,这个指针变量里面存放了字符串"hello C language"的首地址。所以等价于 char str[]=" hello C language "因为,在c语言里面,字符串的底层实现实际上是字符数组,也就是说字符串的等价定义形式是,char str[6]=" hello C language ";有一个字符\0,str代表的也是字符数组的原创 2020-10-12 09:30:07 · 141 阅读 · 0 评论 -
GCC编译过程(预处理->编译->汇编->链接)
GCC编译过程(预处理->编译->汇编->链接)这里gcc编译器 是指在linux类操作系统下,windows编译器 MinGW(相当于windows版GCC)生成可执行程序过程为成四个步骤:1、 由.c文件到.i文件,这个过程叫预处理。以“#”号开头的预处理指令如包含#include,宏定义制定#define等。在源程序中这些指令都放在函数之外,而且一般放在源文件的前面。2、由.i文件到.s文件,这个过程叫编译。这里的编译不是指程序从源文件到二进制程序的全部过程,而是指将经过原创 2020-09-30 23:48:25 · 1216 阅读 · 0 评论 -
Goto语句的用法
goto语句也称为无条件转移语句.goto是C语言的任意跳转语句关键词,后接跳转的标签,调用形式为:goto label,其中label为目标跳转位置的标签,应满足C语言标识符的命名规则。它的语法如下goto label;//其它代码label:其中,label为我们自己定义的一个标签,定义的规则与变量的命名相同,它的位置是不固定的,它可以写在goto语句的后面,也可以写在它的前面,然而goto语句只能在一个函数内部跳转,它并不允许跳转出一个函数外部。从结构化设计的角度来看,它可能不利于程序原创 2020-08-28 20:17:11 · 5837 阅读 · 0 评论 -
脚本语言与非脚本语言
脚本语言(Script languages)是为了缩短传统的编写-编译-链接-运行(edit-compile-link-run)过程而创建的计算机编程语言,脚本语言是编程语言的子集。一个脚本通常是解释执行而非编译。脚本语言通常都有简单、易学、易用的特性,目的就是希望能让程序员快速完成程序的编写工作。脚本语言不需要编译,一句句解释执行就可以,脚本语言是读一行执行一行,而无需关注下一行的语言,非脚本语言则是必须读取整个源程序内容、建立完执行环境后执行的语言。非脚本语言比如java、C这些,如果代码有错误,原创 2020-08-23 17:50:56 · 2996 阅读 · 1 评论 -
关于结构体对齐的详谈
结构体对齐几种代表性格式格式一: //进行整体对齐,最大类型为4=对齐系数4,所以按4整体对齐 1<4(对齐4) 4=4 2<4(对齐4) 所以4+4+4=1201.struct tagPhone02.{03. char A;04. int B;05. short C;06.}Phone; 格式二:01.struct tagPhone02.{03. char A;04. short C;05. int原创 2020-08-05 10:47:47 · 409 阅读 · 0 评论 -
数据结构之链表
先占坑后续补充详细内容原创 2020-07-24 23:06:34 · 84 阅读 · 0 评论 -
数组指针与指针数组
数组指针(指向指针的数组) 又称行指针定义为 int (*p)[2] 从形式来看 是一个指针变量,指向包含了两个元素的数组,每次指针加一时,都要横跨整个步长。似乎数组指针是C语言里专门用来指向二维数组的,它占有内存中一个指针的存储空间。如要将二维数组赋给一指针,应这样赋值:int a[3][4];int (*p)[4]; //该语句是定义一个数组指针,指向包含4个元素的一维数组。p=a; //将该二维数组的首地址赋给p,也就是a[0]或&a[0][0]p++;原创 2020-07-24 22:55:57 · 132 阅读 · 0 评论 -
面向对象与面向过程区别与联系
面向过程:强调的是每一个功能的步骤 C语言面向对象:强调的是对象,然后由对象去调用功能 Java面向对象特征:封装、继承、多态。封装性封装性是面向对象思想的三大特征之一,封装就是隐藏实现细节,仅对外提供访问接口。实现细节部份包装、隐藏起来的方法。封装有属性的封装、方法的封装、类的封装、组件的封装、模块化封装、系统级封装…封装的好处:模块化、信息隐藏、代码重用、插件化易于调试、具有安全性封装的缺点:会影响执行效率封装之前:属性原创 2020-07-22 22:08:37 · 555 阅读 · 0 评论 -
静态全局变量、全局变量、普通局部变量、静态局部变量四者之间的区别
按存储区域分:全局变量、静态全局变量和静态局部变量都存放在内存的全局数据区,局部变量存放在内存的栈区按作用域分:1、全局变量在整个工程文件内都有效;2、静态全局变量只在定义它的文件内有效;3、静态局部变量只在定义它的函数内有效,且程序仅分配一次内存,函数返回后,该变量不会消失;局部变量在定义它的函数内有效,但是函数返回后失效。4、全局变量和静态变量如果没有手工初始化,则由编译器初始化为0。局部变量的值不可知。5、静态局部变量与全局变量共享全局数据区,但静态局部变量只在定义它的函数中可见。静态局部原创 2020-07-22 20:46:00 · 2517 阅读 · 0 评论 -
内存管理问题
一、程序运行需要内存所有的程序都是为了得到一定的结果而被运行的,计算机程序其实都是计算数据,所以数据是计算机程序的重要部分。程序为什么需要内存呢?内存是用来存储可变数据的,数据在程序中表现为全局变量,局部变量和常量(也存储在内存中)对我们写程序非常重要,也对程序运行跟是本质相关。所以内存对于写程序来说几乎是本质需求。越简单的程序需要越少的内存,而越庞大越复杂的程序需要更多的内存。内存管理是我们写程序时很重要的话题。我们以前学过的和了解过的很多变成的关键都是为了内存,譬如数据结构(数据结构是研究数据如原创 2020-07-21 22:38:32 · 267 阅读 · 0 评论 -
头文件重复包含修改方法
方式一:在每个文件的头部定义:#pragmaonce(用于解释本文件中的内容只应用一次) 例: fiel1.h: #pragmaonce #include<stdio.h> #include<math.h> …… File2.h: #pragmaonce #include<stdio.h> #include<math.h> #include”file1.h” ……方式二:为了防止重复包含,头文件中都会有相原创 2020-07-06 15:14:39 · 272 阅读 · 0 评论 -
QT QWebView
一、 简介使用QT程序可以访问web页面,但在不同QT版本中使用的类和方法不同: 1. Qt4中使用webkit模块; 2. Qt5 ~Qt5.5使用webkitwidgets模块; 3. Qt5.6以上版本使用webenginewidgets模块。 所以在不同版本中添加的模块,使用的类都不相同;二、 Qt4版本 Qt4使用webkit模块。 1. 创建一个Widget类的QT工程,在pro工程文件中添加 we原创 2020-06-20 22:47:06 · 7114 阅读 · 1 评论 -
Qt中常用connect用法总结
为方便演示,先自定义一个 Button,然后定义两个重载的信号lass MyButton : public QWidget{Q_OBJECTpublic:explicit MyButton(QWidget *parent = nullptr);signals:void sigClicked();void sigClicked(bool check);};那么在用这个 Button 的时候连接这两个信号,应该是这样:connect(m_pBtn,SIGNAL(sigClicked()),原创 2020-06-20 11:51:25 · 1974 阅读 · 0 评论 -
指针函数释义
指针函数, 即返回值为指针的函数, 本质上是一个函数指针函数,简单的来说,就是一个返回指针的函数,其本质是一个函数,而该函数的返回值是一个指针。声明格式为:*类型标识符 函数名(参数表)所谓的指针函数也没什么特别的,和普通函数对比不过就是其返回了一个指针(即地址值)而已。例:求最大值函数(指针作为函数的返回值)1 #include2 int *max(int *p1, int *p2)3 {4 if(*p1 > *p2)5原创 2020-06-17 15:23:40 · 8776 阅读 · 0 评论 -
函数指针释义
int (*p)(参数表列)这个是定义一个指向函数的指针,返回值为整型。比如int max(int a,int b)将max换成(p)即可,p里放的是max函数的入口地址,所以,此时的p做自加自减等运算无意义。不能用(p+1)表示函数的下一条指令。【例】本例用来说明用指针形式实现对函数调用的方法。int max(int a,int b){if(a>b)return a;else return b;}main(){int max(int a,int b);int(*pmax)();原创 2020-06-17 13:58:22 · 351 阅读 · 0 评论 -
vscode中C语言添加头文件目录
原创 2020-06-06 22:25:56 · 2152 阅读 · 0 评论 -
头文件取代函数声明
Extern来自外部其他文件函数申明最后被头文件取代了。。原创 2020-05-24 12:41:15 · 171 阅读 · 0 评论 -
Printf 输出格式总结
① 首先介绍printf输出正型数,输出的形式为printf(“%d”,n);n为变量,n必须被int 或 long int 或 short int 定义。相信下面几个表达方式,就能说明问题吧:%d=int,%ld=long,%lld=long long。② printf输出浮点数,浮点数也就是数学上的整数,当用double或float定义一个数,就需要利用%f输出,输出的形式为pri...原创 2020-04-18 23:30:51 · 20892 阅读 · 0 评论