c/c++语言
c/c++语言
阿强打代码
这个作者很懒,什么都没留下…
展开
-
c语言程序如何变成可执行文件
环境在ANSI的任何一种实现中,存在两种不同的环境。翻译环境:在这个环境里,源代码被转换为可执行的机器指令。执行环境:用于实际执行代码。翻译环境组成一个程序的每个源文件通过编译过程分别转成目标代码 各个目标文件由链接器捆绑在一起,形成一个单一而完整的可执行程序。 链接器同时也会引入标准c函数库中的任何被改程序所用到的函数。 过程如下图所示 实际上,翻译环境本身也有几个阶段组...转载 2018-10-11 10:05:46 · 3079 阅读 · 0 评论 -
Linux下time函数
Linux下time函数都在time.h头文件中。1、头文件和时间有关的头文件有以下几个:time.hsys/time.hsys/times.hsys/timeb.hsys/timex.htime.h是C标准库的头文件,其余sys开头的都是Linux系统自己的头文件。/usr/include/time.h定义了常用的time函数。到/usr/include/sys目录...转载 2018-10-17 20:47:56 · 8142 阅读 · 0 评论 -
stm32f103串口BootLoader(有keil工程)
因为在论坛和官网都没搜到完全合适的BootLoader,所以自己移植完成了一个BootLoader工程。另外附APP文件工程,可做实验。用良心保证,看完后可以做一个成功的实验。上位机选用SecureCrt,单片机用的stm32f103vet6。首先搞清楚BootLoader过程步骤,代码可以再根据自己需要修改:步骤一:初始化IO口,初始化uart串口,初始化定时器等等步骤二:进入B...转载 2018-10-21 21:52:21 · 1186 阅读 · 0 评论 -
FILE数据类型
1、FILE 是 C语言文件结构定义, 打开文件和文件操作要用到这类结构。可以看成变量类型,用于变量声明。这个是一种数据结构类型,用来表示一个文件的相关信息,如果定义了一个文件指针,就用这个指针来指向某个文件,然后就能使用这个指针对文件来进行操作了。 2、FILE在"stdio.h"中有如下定义:struct _iobuf {char *_ptr; //文件输入的下一个位置int ...转载 2018-10-23 21:35:35 · 8720 阅读 · 0 评论 -
C语言实现设计模式之单例模式
有过面试经验的朋友,或者对设计模式有点熟悉的朋友,都会对单例模式不陌生。对很多面试官而言,单件模式更是他们面试的保留项目。其实,我倒认为,单件模式算不上什么设计模式。最多也就是个技巧。简单的单例模式(不考虑多线程和release)要是用C++写,一般这么写。#include <string.h>#include <assert.h> class object...转载 2018-10-30 13:26:29 · 1094 阅读 · 0 评论 -
两种单例模式
一。 单例模式有以下的特点:(eg。每台计算机可以有若干通信端口,系统应当集中管理这些通信端口,以避免一个通信端口同时被两个请求同时调用。为了避免不一致状态)1、单例类只能有一个实例。 2、单例类必须自己创建自己的唯一实例。 3、单例类必须给所有其他对象提供这一实例。1)懒汉式单例:Singleton通过将构造方法限定为private避免了类在外部被实例化,在同一个虚拟...转载 2018-10-30 13:36:00 · 1269 阅读 · 1 评论 -
AT&T汇编语言语法及GCC的内嵌汇编语法
AT&T汇编语言语法及GCC的内嵌汇编语法 AT&T ASM SyntaxOverview 开发一个OS,尽管绝大部分代码只需要用C/C++等高级语言就可以了,但至少和硬件相关部分的代码需要使用汇编语言,另外,由于启动部分的代码有大小限制,使用精练的汇编可以缩小目标代码的Size。另外,对于某些需要被经常调用的代码,使用汇编来写可以提高性能。 所以我们必须了解汇编语言,即使你...转载 2018-10-30 22:15:53 · 269 阅读 · 0 评论 -
(转)C语言的条件编译#if, #elif, #else, #endif、#ifdef, #ifndef
有些程序在调试、兼容性、平台移植等情况下可能想要通过简单地设置一些参数就生成一个不同的软件,这当然可以通过变量设置,把所有可能用到的代码都写进去,在初始化时配置,但在不同的情况下可能只用到一部分代码,就没必要把所有的代码都写进去,就可以用条件编译,通过预编译指令设置编译条件,在不同的需要时编译不同的代码。 (一)条件编译方法 条件编译是通过预编译指令来实现的,主要方法有: ...转载 2018-11-01 17:20:24 · 269 阅读 · 0 评论 -
C语言关键字及其解释[共32个]
C语言一共有32个关键字,如下表所示:关键字 说明 auto 声明自动变量 short 声明短整型变量或函数 int 声明整型变量或函数 long 声明长整型变量或函数 float 声明浮点型变量或函数 double 声明双精度变量或函数 char 声明字符型变量或函数 struct 声明结构体变量或函...转载 2018-11-03 14:55:01 · 27067 阅读 · 0 评论 -
ASCII可显示字符
ASCII可显示字符 二进制 十进制 十六进制 图形 0010 0000 32 20 (空格)(␠) 0010 0001 33 21 ! 0010 0010 34 22 " 0010 0011 ...转载 2018-11-03 21:15:39 · 377 阅读 · 0 评论 -
斐波那契数列C语言实现
斐波那契数列是一组第一位和第二位为1,从第三位开始,后一位是前两位和的一组递增数列,像这样的:1、1、2、3、5、8、13、21、34、55......#include <stdio.h>long long Fbnl(int N) //非递归{ int a1 = 0; int a2 = 1; int a3 = N; printf("...转载 2018-11-03 21:22:27 · 641 阅读 · 0 评论 -
C++中static_cast和dynamic_cast强制类型转换
一、static_cast关键字(编译时类型检查)用法:static_cast < type-id > ( expression ),该运算符把expression转换为type-id类型,但没有运行时类型检查来保证转换的安全性,它主要有如下几种用法:(1)用于基本数据类型之间的转换,如把int转换为char,把int转换成enum,但这种转换的安全性需要开发者自己保证(这可以...转载 2018-11-06 22:14:50 · 169 阅读 · 0 评论 -
const_cast的真正用途
C++ primer 原话是“如果常量本身不是常量,获得的权限是合法的, 如果本身是常量,使用const_cast再写的后果是未定义的。”所以如果单纯int a,是好理解的,就是达到了我们的目的。如果a本身就是const,就是那块内存被定义为const的话,这样的结果是未定义的,在我的编译器和机器上,这个被定义为无法改变,可是在其他机器上,就不一定了。所以,const_cast的目的并不是...转载 2018-11-06 22:19:51 · 275 阅读 · 0 评论 -
结构体、结构体体指针作为函数返回值
函数使用结构体、结构体指针作为返回值分析32位机,gcc编译器使用结构体作为返回值分析反汇编代码可知,当被调用的子函数返回值为结构体的时候,调用函数将分配一段空间用于存放返回的结构体(使用一个结构体变量接受返回值),并将这段空间的地址作为调用时的参数压栈。子程序不负责对要返回的结构体分配空间。最后返回eax中存放的是结构体空间(栈中)的地址。在子程序退出的时候,调用函数可以在自己的栈帧中访...转载 2018-11-05 17:02:42 · 6864 阅读 · 2 评论 -
KMP算法
有些算法,适合从它产生的动机,如何设计与解决问题这样正向地去介绍。但KMP算法真的不适合这样去学。最好的办法是先搞清楚它所用的数据结构是什么,再搞清楚怎么用,最后为什么的问题就会有恍然大悟的感觉。我试着从这个思路再介绍一下。大家只需要记住一点,PMT是什么东西。然后自己临时推这个算法也是能推出来的,完全不需要死记硬背。KMP算法的核心,是一个被称为部分匹配表(Partial Match Table...转载 2019-01-03 20:52:41 · 130 阅读 · 0 评论 -
Linux头文件详解
头文件主目录include头文件目录中总共有32个.h头文件。其中主目录下有13个,asm子目录中有4个,Linux子目录中有10个,sys子目录中有5个。这些头文件各自的功能如下,具体的作用和所包含的信息请参见第14章。<a.out.h>:a.out头文件,定义了a.out执行文件格式和一些宏。 <const.h>:常数符号头文件,目前仅定义了i节点中i_mod...转载 2018-10-17 18:44:43 · 1413 阅读 · 0 评论 -
LINUX 使用tcgetattr与tcsetattr函数控制终端
为了便于通过程序来获得和修改终端参数,Linux还提供了tcgetattr函数和tcsetattr函数。tcgetattr用于获取终端的相关参数,而tcsetattr函数用于设置终端参数。这两个函数的具体信息如表6.2所示。表6.2 tcgetattr函数和tcsetattr函数 头文件 函数形式 int tcgetattr(int...转载 2018-10-17 14:15:05 · 618 阅读 · 0 评论 -
break,continue,return的区别
break,continue,return的区别最近总使用到这3个关键字,所以想总结一下他的用法. 1)break 直接跳出当前的循环,从当前循环外面开始执行,忽略循环体中任何其他语句和循环条件测试。他只能跳出一层循环,如果你的循环是嵌套循环,那么你需要按照你嵌套的层次,逐步使用break来跳出. 2)continue 也是终止当前的循环过程,但他并不跳...转载 2018-10-19 19:36:03 · 97 阅读 · 0 评论 -
linux几种时间函数总结
一、linux时间函数总结 最近的工作中用到的时间函数比较频繁,今天抽时间总结一下,在linux下,常用的获取时间的函数有如下几个: asctime, ctime, gmtime, localtime, gettimeofday , mktime, asctime_r, ctime_r, gmtime_r, localtime_r二、常用的结构体(1)struct t...转载 2018-10-17 21:07:03 · 108 阅读 · 0 评论 -
如何查看errno 错误代码
首先在自己的程序中#include<errno.h>添加打印errno的语句 printf("errno is: %d\n",errno);根据errno的值查错。errno的不同值的含义:以下来自linux 2.4.20-18的内核代码中的/usr如何查看errno 错误代码 /include/asm/errno.h#ifndef _I386_ERRNO_H#define...转载 2018-10-17 22:07:48 · 729 阅读 · 0 评论 -
C语言中#define的用法
今天整理了一些#define的用法,与大家共享!1.简单的define定义#define MAXTIME 1000一个简单的MAXTIME就定义好了,它代表1000,如果在程序里面写if(i<MAXTIME){.........}编译器在处理这个代码之前会对MAXTIME进行处理替换为1000。这样的定义看起来类似于普通的常量定义CONST,但也有着不同,因为defi...转载 2018-10-17 22:10:25 · 290 阅读 · 0 评论 -
linux C函数之stat函数
1.函数功能:通过文件名filename获取文件信息,并保存在buf所指的结构体stat中2.函数原型1)函数头文件#include <sys/stat.h>#include <unistd.h>2)函数int stat(const char *file_name, struct stat *buf )3)返回返回值: 执行成功则...转载 2018-10-17 22:11:55 · 422 阅读 · 0 评论 -
Linux下的C语言函数perror
perror的函数原型为`void perror(const char *s)`这个函数会先输出你传给他的实参 s 所指的字符串,后面再加上错误原因字符串。此错误原因依照全局变量errno 的值来决定要输出的字符串。在库函数中有个errno变量,每个errno值对应着以字符串表示的错误类型。当你调用"某些"函数出错时,该函数已经重新设置了errno的值。perror函数只是将你输入的一些信...转载 2018-10-14 00:14:51 · 261 阅读 · 0 评论 -
C语言#error预处理
#error 预处理指令的作用是,编译程序时,只要遇到#error 就会生成一个编译错误提示消息,并停止编译。其语法格式为:#error error-message注意,宏串error-message 不用双引号包围。遇到#error 指令时,错误信息被显示,可能同时还显示编译程序作者预先定义的其他内容。该预处理将产生一条编译时错误信息,信息中包含#error后指定的内容。C语言标...转载 2018-10-14 00:18:07 · 330 阅读 · 0 评论 -
断言(ASSERT)的用法
断言(ASSERT)的用法 我一直以为assert仅仅是个报错函数,事实上,它居然是个宏,并且作用并非“报错”。 在经过对其进行一定了解之后,对其作用及用法有了一定的了解,assert()的用法像是一种“契约式编程”,在我的理解中,其表达的意思就是,程序在我的假设条件下,能够正常良好的运作,其实就相当于一个if语句:if(假设成立){ 程序正常运行;}else{...转载 2018-10-14 00:21:27 · 119 阅读 · 0 评论 -
C语言assert函数完全攻略
断言assert函数,C语言assert函数完全攻略对于断言,相信大家都不陌生,大多数编程语言也都有断言这一特性。简单地讲,断言就是对某种假设条件进行检查。在 C 语言中,断言被定义为宏的形式(assert(expression)),而不是函数,其原型定义在<assert.h>文件中。其中,assert 将通过检查表达式 expression 的值来决定是否需要终止执行程序。也就是...转载 2018-10-14 00:30:17 · 15021 阅读 · 0 评论 -
main函数中两个参数的用法总结
1、定义 C语言规定main函数的参数只能有两个,习惯上这两个参数写为argc和argv。因此,main函数的函数头可写为: main (argc,argv)C语言还规定argc(第一个形参)必须是整型变量,argv( 第二个形参)必须是指向字符串的指针数组。加上形参说明后,main函数的函数头应写为:int main (int argc,char *argv[]){…}或者 int mai...转载 2018-10-18 12:50:39 · 1259 阅读 · 0 评论 -
二重指针
总结:函数地址传递调用函数时必须用 函数名(& a)的方式。不加&就是值传递。指针也是变量,虽说他存储的是别人的地址。如果想把指针作地址传递,就必须使用地址的地址,即二重指针。 #include <stdio.h>#include <stdlib.h>#include <string.h>void Getmemery(...转载 2018-10-15 23:11:20 · 203 阅读 · 0 评论 -
atoi函数的用法及用C语言实现ato
库函数原型:#inclue <stdlib.h>int atoi(const char *nptr);用法:将字符串里的数字字符转化为整形数。返回整形值。注意:转化时跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时('/0')才结束转换,并将结果返回。例:#include <stdio.h>#include &l...转载 2018-10-16 18:39:09 · 1514 阅读 · 0 评论 -
ioctl()函数详解
我这里说的ioctl函数是指驱动程序里的,因为我不知道还有没有别的场合用到了它,所以就规定了我们讨论的范围。写这篇文章是因为我前一阵子被ioctl给搞混了,这几天才弄明白它,于是在这里清理一下头脑。一、 什么是ioctl ioctl是设备驱动程序中对设备的I/O通道进行管理的函数。所谓对I/O通道进行管理,就是对设备的一些特性进行控制,例如串口的传输波特率、马达的转速等等。它的调用个...转载 2018-10-16 19:28:44 · 679 阅读 · 0 评论 -
sys/types.h,sys/stat.h与fcntl.h的作用
今天学习了国嵌Linux应用班的视频,文件操作。通过Linux系统调用(区别于C语言库函数,系统调用依赖于Linux系统,C语言库函数与操作系统是独立的)的方式进行文件操作时,看例子程序用到了这么几句 #include<sys/types.h> #include<sys/stat.h> #include<fcntl.h>,找了下它们的作用,备忘。1. sys...转载 2018-10-16 21:17:55 · 3643 阅读 · 0 评论 -
memset()函数及其作用
1. memset()函数原型是extern void *memset(void *buffer, int c, int count) buffer:为指针或是数组, c:是赋给buffer的值, count:是buffer的长度. 这个函数在socket中多用于清空数组.如:原型是memset(buffer, 0, s...转载 2018-10-16 21:21:39 · 116 阅读 · 0 评论 -
KMP模式匹配算法——next值求解
j 1 2 3 4 5 6 7 8 模式串 a b a a b c a c next[j] 0 1 1 2 2 3 1 2各个位的解释 1.前两位必定为0和1。 2.计算第三位的时候,看第二位b的next值,为1,则把b和1对应的a进行比较,不同,则第三位a的next的值为1,因为一直比到最前一位,都没有发生比较相同的现象。 3.计算第四位的时候,看第三位a的next值,为1,则把a...转载 2019-01-05 10:51:16 · 3671 阅读 · 1 评论