![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c语言
文章平均质量分 60
我是标同学
我非常喜欢编程
展开
-
c/c++常见的数据类型表示的范围
Windows平台(无论32/64位的系统,机器,比编译器):int跟long是一样的,都是占4个字节。取决于平台(但是有个规定,long 至少 >= int)Unix系统平台:int是32位,long就是64位的。有些8/16位单片机:int甚至只是16位的而已。原创 2022-11-13 10:34:13 · 324 阅读 · 0 评论 -
c语言编译器学习方法总结
首先直接买教程看,确实难,无非就是那几本书,龙书,虎书,鲸书之类,但是这些书还是很难读懂的。c语言作为开发语言,待编译语言也是c语言(简化版),推荐如下书:自己动手写编译器、链接器(看完了,感觉后面部分比较难搞了) 自己动手构建编译系统 编译汇编与链接(好像也不错,有空买来看看)上述书里面都实现了编译器,但是是简化版c语言的编译,比如不支持浮点类型。这里大家都推荐一个值得学习的实践编译器,ucc,与gcc都兼容的完整版c编译器,看了一下,好像也不错,可以买对应的书学一下。...原创 2022-04-18 00:11:12 · 618 阅读 · 0 评论 -
自己写编译器(c语言的BNF产生式汇总)
The syntax of C in Backus-Naur Form<translation-unit> ::= {<external-declaration>}* <external-declaration> ::= <function-definition> | <declaration> <function-definition> ::= {<declarati.原创 2022-04-17 23:39:00 · 365 阅读 · 0 评论 -
gcc链接脚本通俗易懂的文章(推荐给大家)
连接脚本将我整整蒙了1天零一个上午,做了很多实验,看了人家不少例子代码勉强能驾驭了,让linker按照我想要的来处理,做个笔记。1,什么叫输入段,什么叫输出段不知道怎么回事,我对GCC系列的输入和输出两个单词总是进入思维死角,很简单就是 input section 和 output section,这里不是说翻译的问题,我觉得是一种思考的方式的问题。我的问题就是:既然叫输入端,那输入什么?同理,输出的是什么?不知道其他人不会不理解这个问题,我自己的话是理解了不少时间了 -v-所谓的输出段,是转载 2022-01-04 15:12:46 · 1257 阅读 · 0 评论 -
关于gcc使用的一些笔记
gcc的命令选项都是,-x1 xxx1内容 -x2 xxx2内容这样,比如头文件路径添加选项 gcc命令选项,顺序无关紧要 --xx和-,是用区别的,前者是选项的全称,后面一个-的是选项的缩写 -L xx目录,告诉编译器,添加库文件搜索目录,-L.表示在当前目录下搜索库文件,这个也得显示指定出来,因为gcc不会自动去搜索 关于库方面,-static选项,表明我要你优先静态库方式链接(现在就链接,而不是运行时才链接),比如:当前目录下有两个库文件,libx.so,libx.a,前者是动态库,后者是静态原创 2022-01-04 13:31:17 · 305 阅读 · 0 评论 -
交叉编译器 arm-linux-gnueabi 和 arm-linux-gnueabihf 的区别
交叉编译器 arm-linux-gnueabi 和 arm-linux-gnueabihf 的区别自己之前一直没搞清楚这两个交叉编译器到底有什么问题,特意google一番,总结如下,希望能帮到道上和我有同样困惑的兄弟…..一. 什么是ABI和EABI1) ABI: 二进制应用程序接口(Application Binary Interface (ABI) for the ARM Architecture)在计算机中,应用二进制接口描述了应用程序(或者其他类型)和操作系统之间或其他应用程序的低级转载 2022-01-03 13:35:46 · 533 阅读 · 0 评论 -
C程序运行原理与程序重定位原理
我们编译生成目标文件,子程序跳转时候,其实用的都是相对地址跳转,比如目标程序标号距离当前程序(pc指针的值)的偏移,然后跳转过去即可。访问全局变量也是如此,编译器分配的全局变量距离当前pc的相对偏移,访问就是了。但是,当我们的data段(全局变量)需要搬移到其它位置时候,这个相对偏移,就出错了。为了解决代码运行时重定位问题,我们的程序编译时候加上-fpic选项,生成的就是与地址无关的代码。编译器会在目标文件text段末尾加上一个全局符号表(程序中可以通过__rel_dyn_start引用)。所有原创 2022-01-02 17:58:58 · 740 阅读 · 0 评论 -
c语言高级应用 list_entry 链表获取所在结构体的首地址
为了代码简介高效,可以方便的被多个链表连接起来,而且这个链表可以很方便的被各种不同类型数据域复用,我们实现单双链表时候(链表节点中不需要数据域),可以像下面这样子:typedef struct List{ struct List* next; struct List* pre; //注:这里面没有数据域}List_t;typedef struct Student{ char name[10]; int age; int high;原创 2021-12-05 23:42:20 · 1856 阅读 · 0 评论 -
C语言中宏定义宏编译的使用#if,#ifdef,#ifndef,#elif,#else,#endif,defined使用详解,可以实现和if else一样的效果
#define 定义一个预处理宏#undef 取消宏的定义#if 编译预处理中的条件命令,相当于C语法中的if语句#ifdef 判断某个宏是否被定义,不能或运算,若已定义,执行随后的语句#ifndef 与#ifdef相反,判断某个宏是否未被定义,不能或运算#elif 若#if, #ifdef, #ifndef或前面的#elif条件不满足,则执行#eli...原创 2021-10-14 10:27:54 · 5946 阅读 · 0 评论 -
c++语言与c语言相互调用 踩的坑 否则报函数未定义 一文读懂extern “C“
同一个工程中c++语言与c语言相互调用之处踩的坑否则报函数未定义,注意如下几点:c编译器和c++编译器编译同一个函数出来的符号结果是不一样的(因为c++支持重载,比如fun(int a,int b)函数c++编译出来就是fun_int_int,而c编译出来仅是fun),因此无法相互调用 extern "C"{ } 是c++编译器才能识别的关键字,c编译器遇到了会直接报错 xx.cpp文件IDE会自动采用c++编译器进行编译,xx.c文件被自动采用c编译器来编译 __cplusplus宏是c++编译原创 2021-03-11 11:56:15 · 3265 阅读 · 1 评论 -
C语言结构体所占用的字节数如何计算
看到个写得比较好的博文,转给大家看看格式一: 1 2 3 4 5 6 01.structtagPhone 02.{ 03.charA; 04.intB; 05.shortC; 06.}Phone; 格式二:...转载 2020-05-05 16:14:37 · 8290 阅读 · 1 评论 -
C语言中有无符号类型转换和截断问题,很容易入坑!!!
基础知识复习:正数在内存中的表示形式:以原码表示的,比如1在在32位机器上为0x00000001 负数:以补码表示的,比如-1在32位机器的表示是0xffffffff(最高位表示符号位,关于补码表示,看我后面的参考链接) unsignedchar转更长字节的类型比如unsignedint,因为是无符号数(总是大于等于0的数)转换,则在高位补0即可,比如unsignedchara=0...原创 2020-01-04 18:41:59 · 5148 阅读 · 0 评论 -
关于队列的操作注意事项
这里是用链表实现的队列,主要注意一点,很难发现的隐形错误: // 1. 如果硬实时就绪队列前面的任务硬实时任务为挂起态,即已经执行完了,那么就从就绪队列里删除这个队首TAB if(IsEmpty(queueReadyHardTaskPtr)!=true) { for(i=0;i<queueReadyHardTaskPtr->Size;i+...原创 2020-01-04 00:08:04 · 1239 阅读 · 0 评论 -
提取字符串中一个或多个空格隔开的字符串
举例:str = " abc 123333 qqw 12 1 3 sadfd dfasfdsf "这样的字符串提取出指定的第几n的字符串内容。比如针对上面的字符串,想提取出第3个字符串,即"qqw",那就写为unsignedchar*res[10];getParaFromStrInstruction(str,3,res);printf(r...原创 2019-12-18 19:15:32 · 4119 阅读 · 0 评论 -
c语言头文件包含嵌套问题和包含原则
a.h#include<stdio.h>#ifndef _A_H#define _A_H只是解决头文件重复包含的问题的,但是头文件嵌套包含,就不代表不会出问题,就会关系错综复杂,出现标识符未定义,重定义等错误。(具体的错误和举例,自己百度搜索吧)所以C语言头文件包含原则如下:(头文件嵌套的话,会造成包含很多不必要的头文件,会造成编译速度变慢)文件中实现变量、函数的定义...原创 2019-12-12 08:16:50 · 5611 阅读 · 0 评论 -
C语言指针通俗易懂讲解
有空再写原创 2018-11-09 20:02:06 · 928 阅读 · 2 评论 -
51单片机和stm32单片机数据类型占的字节大小
51单片机(8位):char 1int 2long 4float 4double 8指针类型所占字节和地址总线宽度有关系,8位机器的话就是1个字节stm32单片机(32位):char 1short 2int 4long 4float 4double 8指针类型所占字节和地址总线宽度有关系,32位机器的话就是4个字节...原创 2019-04-25 21:54:50 · 9959 阅读 · 5 评论 -
ASCII文件和bin二进制文件的区别是什么
程序中一个结构体struct A{char a;char b;bool c;}struct A v;v.a = 128;v.b = 16;v.c = 1;此时如果我们想把这个结构体变量v保存起来,就这样:W25QXX_Write((u8*)&v,ADDR,sizeof(v)); //保存在地址为ADDR的flash存储器里或者保存在一个文件里都...原创 2019-04-25 23:14:00 · 2847 阅读 · 0 评论 -
c语言中__align()关键字的作用与内存对齐的原理
32位cpu为例,cpu在访问内存的时候是以一个字进行传输的(计算机中,一个机器字长就是cpu位数,32位cpu,四个字节为一个字),那么也就是说cpu读取数据每次都是四个字节四个字节的读取,计算机最初是从地址0开始寻址,那么寻址也就是4个字节4个字节的地址依次往后找。如果我们只需要读取一个字节的char型变量,那么计算机也是读取它所在的4个字节出来,然后提取出那个目标字节就行了,因为32位计算机...原创 2019-04-25 23:22:02 · 34481 阅读 · 3 评论 -
C语言函数调用时候内存中栈的动态变化详细分析
先了解如下几点知识和过程:*冯诺伊曼体系计算机程序指令代码都是提前从硬盘加载进入内存从而执行的(如果是哈佛体系结构的计算机指令代码是直接在外存里面执行的,具体可以看我这篇文章,计算机冯诺伊曼体系结构和哈佛体系结构区别和处理器性能评判标准),这些指令代码是存放在内存中进程的代码段,同一个函数内的指令代码是按照地址顺序存储的(编译器决定的)(也就是说只要指令地址+1就可以自动得到下一条指令的地址...原创 2019-05-02 00:23:41 · 9441 阅读 · 9 评论 -
关于c语言的基础知识笔记
*typedef函数指针用法char(*pFun)(int); charglFun(inta){return;} voidmain() { pFun=glFun; (*pFun)(2); }所以说pFun就是一个实实在在的指针变量,而不是一种类型2.使用typedef更直观更方便形式1:typedef 返...原创 2019-04-23 19:38:51 · 293 阅读 · 0 评论 -
51单片机实现拼音输入法
这是我几年前做的一个电子设计比赛,获得了二等奖,就是实现一个老人机的九宫格输入法,可以输入数字与字符和常用汉字,然后可以通过无线模块发射出去,另一个单片机可以接收并且还原出来对方发送的信息内容,其中用到了无线模块,双重指针,和一个亲手整理的巨大的汉字库。现在想起来,应该把实现过程以及源码分享出来,让更多的人大家一起学习学习,共同进步,除此之外,还做了好几个其他项目,比如stm32做的功能齐全的音乐...原创 2019-10-01 21:31:51 · 2622 阅读 · 0 评论 -
拉格朗日插值算法和牛顿插值算法c语言实现
有空再写原创 2018-06-06 14:42:05 · 3774 阅读 · 7 评论