
C/C++
liming0931
不积小流,无以成江海
展开
-
分享GitHub上一位老外的嵌入式C编码规范(收藏细读)
网上都是拷贝复制,而且都不放英文连接,简直不尊重原作者。这里直接上原文连接MaJerle/c-code-style: Recommended C code style and coding rules for standard C99 or later (github.com)原创 2021-07-10 12:53:21 · 854 阅读 · 0 评论 -
如何解释复杂的 C/C++ 声明
如何解释复杂的 C/C++ 声明文章目录如何解释复杂的 C/C++ 声明序1. 基础2. const修饰符3. typedef的微妙之处4. 函数指针5 左右法则6. 推荐阅读我想很多人曾经遇到过像 int * (*fp1) (int) [10] 这样的声明;或者你无法理解的类似的东西?本文将教您解释如此复杂的 C/C++声明,包括使用打字、const 和函数指头。序你是否曾经遇到过类似。int * (* (*fp1) (int) ) [10];的语句而无法理解呢?这篇文章将教你解释C/C++宣言,翻译 2021-06-12 22:28:06 · 703 阅读 · 1 评论 -
老牌C/C++ IDE——DEV C++有新的大版本了
序:这个软件也是有相当历史了,可以追溯到win98时代,1998年就已经发布第一版本了,其中4.9.9.2版本是最经典的,网上镜像应该是最多的,这个版本才10M大小,后面版本都是他的子子孙孙。sourceforge下面有三个网址,依次更新。其中最新版本有github的仓库。网址:https://sourceforge.net/projects/dev-cpp/,Dev-C++ download | SourceForge.net 这个是最老的,2021年就停了https://sourcefo.原创 2021-05-19 09:34:07 · 15447 阅读 · 1 评论 -
C语言——if(0)之后的语句真的不会执行吗?
1、序学过c语言的都知道,通常:If(0)之后的代码是不执行的,网上也有详细的说明。1.1、形式:if (表达式) {语句... }1.2、解释:在执行if语句时,首先会计算表达式的值,如果表达式的值为零,语句不会执行,若非零,则执行语句。由此可见if (0)表示不执行,if (1)表示要执行。if (x)根据x的值是否为0来决定是否执行,他等价于if (x != 0)。if语句中的条件无论是什么最终都要转换成一个布尔值,因此,1.3、举个例子if(x)相当于if(x !..原创 2021-05-03 08:32:50 · 9454 阅读 · 2 评论 -
还记得当年的c-free和Borland c++5.5编译器吗?
http://www.mediafire.com/file/1202f6i1hn5vba3/Borland_C%252B%252B.rar/file 这个链接可以下载,压缩包里面包含了两个软件,bcc55不用安装,cfree5安装一下即可,不过不免费,大家都懂得,网上也有。他俩现在已经默默淘汰了,不过win10测试了cfree4和cfree5依然可以使用,但是内置的mingw版本太老了,很多c99的特性都不支持了,因此安装了可以测试下,新的功能还是使用新版本的gcc好了,不过当年这两个软...原创 2021-04-08 10:30:58 · 820 阅读 · 2 评论 -
C 语言有没有 REPL?
转载自:https://www.zhihu.com/question/53638858个人推荐chCh standard edition网上还有7.0的免费版本,6.3.0免费的也有~~~A REPL (say it, “REP-UL”) is an interactive way to talk to your computer in Python. To make this work, the computer does four things: Read the user input..转载 2021-03-23 09:01:40 · 503 阅读 · 0 评论 -
Using Assembly Language in Linux.
http://www.linuxassembly.org/articles/linasm.html这个文章挺好的,还有以下文章http://ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.htmlhttps://0xax.gitbooks.io/linux-insides/content/Theory/linux-theory-3.htmlhttps://wiki.osdev.org/Inline_assemblyhttps://gcc.g原创 2021-02-25 10:47:23 · 120 阅读 · 0 评论 -
条件编译的推荐写法
// 普遍用法#if MACRO // your code block 1#else // your code block 2#endif// 推荐用法#if !defined(MACRO) #error "No valid MACRO defined!"#elif (MACRO == 1) // your code block 1#else // your code block 2#endif结合上面的条件编译,在iar中可以添加宏如下:.转载 2020-12-18 13:59:23 · 397 阅读 · 0 评论 -
函数宏的三种封装方式
原文链接如下:https://blog.youkuaiyun.com/qq_35692077/article/details/1029949591. 函数宏介绍函数宏,即包含多条语句的宏定义,其通常为某一被频繁调用的功能的语句封装,且不想通过函数方式封装来降低额外的弹栈压栈开销。函数宏本质上为宏,可以直接进行定义,例如:#define INT_SWAP(a,b) \ int tmp = a; \ a = b; \ b = tmp但上述的宏具有一转载 2020-12-18 13:49:05 · 1261 阅读 · 0 评论 -
嵌入式c编程的一点小记录——宏
近期都在忙着项目开发,因此博客更新就比较佛系了,当然期间也看了不少博主的文章,学到了很多技巧,本文大致罗列下。顺便理一下自己的思路,有输入也要有输出嘛。网上很多文章都说,enum枚举比宏要好,优点的确也是有的,序号自动递增,更加模块化, 更加好管理。其实宏也是有比较好的功能的,只是通常,我们都不会使用高级的用法,反正网络上也是普通的用法,很少有高级用法(有当然有的,需要自己好好耐心找)。1、通常来讲,宏就是在预编译的用于替换的,因此,如果宏里面有enum,那么预编译是不会成功的。gcc,tcc等原创 2020-12-12 23:20:51 · 509 阅读 · 0 评论 -
如何在vscode使用最新的tcc编译器
tcc编译器也就是TinyCC (aka TCC),是法国工程师开发的,小巧强大,测试c语言的利器,还可以集成到vscode中,安装tcc compiler/run即可,但是好像不是最新的0.9.27,因此测试一些c语言的功能就显得不够全面,因此可以手动下载tcc-0.9.27-win64-bin.zip文件,将c:\Users\xxx\.vscode\extensions\tuymove.tcc-compiler-0.0.4\下的文件用0.9.27的替代即可使用了。方便快捷。...原创 2020-11-30 19:34:53 · 914 阅读 · 0 评论 -
X Macros in C
https://www.codeproject.com/articles/1116877/x-macros-in-c#:~:text=X%20Macros%20in%20C%201%20Introduction.%20In%20this,a%20few%20years%20ago.%20...%204%20Conclusion.%20原创 2020-11-30 17:33:45 · 245 阅读 · 0 评论 -
宏定义相关的文章整理
网上找到了很多比较好的文章,特此整理下:傻孩子的“为宏正名”系列知乎专栏:https://zhuanlan.zhihu.com/p/59807834可变参数的讨论:https://stackoverflow.com/questions/5588855/standard-alternative-to-gccs-va-args-trick,宏定义的黑魔法 - 宏菜鸟起飞手册:https://onevcat.com/2014/01/black-magic-in-macro/C宏展开的几个注意事原创 2020-11-15 12:01:08 · 185 阅读 · 0 评论 -
两个比较好的ooc(面向对象c语言编程)库
https://github.com/GorgonMeducer/PLOOChttps://github.com/Akagi201/lw_oopc都是大佬的手笔值得学习原创 2020-11-14 21:45:19 · 841 阅读 · 0 评论 -
每个程序员都应当知道的“大小端”
除了维基百科,我认为中文里面讲述比较好的大小端文章了,因此转载下。概述机器是分大小端的,这对我们编程有什么影响呢?什么又是大小端呢?也许我们很多时候都不清楚,但仍然可以很好地使用电脑,或者编写代码。但我认为《圣经》里有句话说得很好,“你应该了解真相,真相会使你自由”。所以这次,我要揭开“字节端”的面纱,共享科学之美。小故事Jonathan swift在1726年写的讽刺小说《格列佛游记》,小人国的内战就源于吃水煮鸡蛋时究竟是从大头(Big-Endian)敲开还是从小头(Little-End转载 2020-11-05 09:33:51 · 548 阅读 · 0 评论 -
C语言union用于打包和拆包数据
使用union来打包/拆包数据联合的成员存储在共享存储区中。这是使我们能够找到有趣的工会应用程序的关键功能。考虑下面的联合:union { uint16_t word; struct { uint8_t byte1; uint8_t byte2; }; } u1;复制代码此union内部有两个成员:第一个成员“ word”是一个两字节的变量。第二个成员是两个单字节...转载 2020-11-04 19:35:51 · 1102 阅读 · 0 评论 -
#if defined——Preprocessing directives的使用
原文:https://stackoverflow.com/questions/9946108/if-defined-x-y-is-this-valid下面的示例显示||的更常见用法和&&操作符针对#defined宏:#define AA 1#define BB 2#if (defined AA) || (defined BB) #warning "A or B"#endif#if (defined AA) && (defined BB) .转载 2020-11-04 17:30:20 · 236 阅读 · 0 评论 -
C 语言中浮点数的秘密(绝对通俗易懂)
https://www.cnblogs.com/CodeWorkerLiMing/p/13656197.html详见博客园文章原创 2020-09-12 11:10:30 · 231 阅读 · 0 评论 -
巧用c语言数组来操作数字逻辑电路
这个算是开发中的小技巧了,也不知道如何起标题。通常为了节省单片机的引脚,我我们同城会使用比较多的数字电路来扩展,比如74hc574的D触发器,74ls138的38译码器,3态八路缓冲器/线路驱动器74hc541,还有就是串进并出的74hc595.当然还有与非门、与门、或门等等最基本的数字逻辑电路来构成gpio的扩展。数字电路的扩展的理解:这里有两点比较值得注意的,1、很多时...原创 2020-02-26 20:58:17 · 981 阅读 · 0 评论 -
keil中error: #70: incomplete type is not allowed—解决方法
今天在写程序的时候,想使用sizeof求数组的大小,数组中其他c文件定义,在头文件使用extern uint8_tbuff_value[]; 声明但是keil编译报错,网上查了,发现,需要写成extern uint8_tbuff_value[30];把数组的大小固定了,才能编译通过。...原创 2019-12-07 17:36:51 · 2131 阅读 · 0 评论 -
strtok在keil中使用小笔记及字符串转换为多个浮点数的方法
在pc上面使用这个字符串函数,是没有问题的,但是我在keil中结合rtos来处理字符串的时候,比如char *s = "1.01313;17.2609;17.4875";那么就只能解析到1.01313,后面的数据是错误的,也不知道是啥原因,后来干脆使用了比较简单的方式:1.01313直接使用atof(s)来提取,因为atof函数遇到;会自动结束转换,得到浮点数1.01313第二个可以使用s...原创 2019-11-15 11:17:34 · 1314 阅读 · 0 评论 -
#define的一个小技巧
/* atof example: sine calculator */#include <stdio.h> /* printf, fgets */#include <stdlib.h> /* atof */#include <math.h> /* sin */#define vfd_com_timeout_clear...原创 2019-10-13 21:29:27 · 193 阅读 · 0 评论 -
Digital Mars Compiler简介及使用
摘自:http://my.oschina.net/u/202634/blog/35148很早就下载了Digital Mars 的编译器dm8.42,现在已经都8.52了,下载来是一个压缩包,不用安装,解压之后就可以使用,这可那些vs好多了,文件小,不用安装,哈哈!可是当初的我在这方面是个菜鸟,经过了几个月linux学习以及操作,懂了点command-line的使用。我想linux和window转载 2011-11-14 13:06:30 · 3141 阅读 · 0 评论 -
gcc链接外部函数库,比如数学函数库
摘自http://hi.baidu.com/newyork_zero/blog/item/601ab9d7af1913ce50da4b16.html链接外部库(摘子ubuntu中文论坛)库是预编译的目标文件(object files)的集合,它们可被链接进程序。静态库以后缀为‘.a’的特殊的存档文件(archive file)存储。标准系统库可在目录 /usr/lib 与 /lib 中转载 2011-11-23 10:44:42 · 6851 阅读 · 0 评论 -
标准输入流中空白字符的怪异 —— 区分 scanf 与 cin
int main() { int ival1 = 123, ival2 = 1; char ch = 't'; scanf("%d%d", &ival1, &ival2); scanf("%c", &ch); printf("%d/n%d/n%c/n", ival1, ival2, ch); return 0; } /* 输入:2回车a回车转载 2011-11-03 20:59:21 · 768 阅读 · 0 评论 -
深入理解C语言小记
导读:Dennis Ritchie过世了,他发明了C语言,一个影响深远并彻底改变世界的计算机语言。一门经历40多年的到今天还长盛不训的语言,今天很多语言都受到C的影响,C++,Java,C#,Perl,PHP,Javascript等等。但是,你对C了解吗?相信你看过本站的《C语言的谜题》还有《谁说C语言很简单?》。这里,我再写一篇关于深入理解C语言的文章,一方面是缅怀Dennis,另一方面是告诉大转载 2011-11-07 18:22:35 · 705 阅读 · 0 评论 -
Writing endian-independent code in C
http://www.ibm.com/developerworks/aix/library/au-endianc/index.html?ca=drs- IntroductionTo understand the concept of endianness (see Endianness), you need to be familiar, at a highly abstract转载 2011-11-03 13:41:22 · 790 阅读 · 0 评论 -
C51:通用、存储器指针
http://www.8951.com/book/1jiaoUV13.htmC51编译器支持用星号(*)进行指针声明。你可以用指针完成在标准C语言中有的所有操作。另外,由于8051及其派生系列所具有的独特结构,C51编译器支持两种不同类型的指针:存储器指针和通用指针。通用指针通用或未定型的指针的声明和标准C语言中一样。如:char *s; /* string原创 2011-11-02 21:16:22 · 2695 阅读 · 0 评论 -
可重入函数与不可重入函数(转)
http://www.cnblogs.com/luvi/archive/2008/05/09/1190493.htmlhttp://www.keil.com/support/man/docs/c51/c51_le_reentrantfuncs.htm主要用于多任务环境中,一个可重入的函数简单来说就是可以被中断的函数,也就是说,可以在这个函数执行的任何时刻中断它,转入OS调度下去转载 2011-11-02 21:00:18 · 799 阅读 · 0 评论 -
int main(int argc,char *argv[])中参数的意义
摘自:http://www.cnblogs.com/flyfly/archive/2011/08/02/main_arguments.html int main(int argc,char * argv[])argv为指针的指针argc为整数 char **argv or: char *argv[] or: char argv[][]转载 2011-11-08 21:21:01 · 1480 阅读 · 0 评论 -
C51 bit和sbit的区别
摘自: http://blog.youkuaiyun.com/dllbl/article/details/3839262 bit和sbit都是C51扩展的变量类型。 bit和int char之类的差不多,只不过char=8位, bit=1位而已。都是变量,编译器在编译过程中分配地址。除非你指定,否则这个地址是随机的。这个地址是整个可寻址空间,RAM+FLASH+扩展空间。bit只有0和1两种值转载 2011-11-11 17:51:23 · 3257 阅读 · 0 评论 -
C++ using namespace std详解
摘自:http://blog.youkuaiyun.com/dllbl/article/details/4280055C++ using namespace std熟练掌握C/C++语言,熟悉Windows开发平台,能熟练运用MFC自主编开发出一些应用程序;熟练掌握SQL语句,对数据库有很好的认识,能熟练使用SQL Server2000软件;熟练掌握JAVA语言,熟转载 2011-11-11 17:58:12 · 902 阅读 · 0 评论 -
printf函数解析
摘自:http://www.cplusplus.com/reference/clibrary/cstdio/printf/function int printf ( const char * format, ... );Print formatted data to stdoutWrites to the standard output (stdo转载 2011-12-06 20:21:38 · 724 阅读 · 0 评论 -
C语言数组与指针详解
摘自: http://blog.youkuaiyun.com/mr_raptor/article/details/6844691好多同学都说:“老师,我看到指针就晕!”,说实话,见过晕血的,见过晕车的,晕指针的到是第一次听说! 我们先来分析一下晕车的原理,再来对比一下为什么晕指针。 晕车,是因为耳朵里的一个器官对外界的振动太敏感,导致身体调节功能紊乱,系统不能正常工作,轻转载 2011-12-06 19:16:11 · 1726 阅读 · 0 评论 -
深入理解C/C++数组和指针
http://bbs.lupaworld.com/thread-183216-1-1.htmlC语言中数组和指针是一种很特别的关系,首先本质上肯定是不同的,本文各个角度论述数组和指针。一、数组与指针的关系数组和指针是两种不同的类型,数组具有确定数量的元素,而指针只是一个标量值。数组可以在某些情况下转换为指针,当数组名在表达式中使用时,编译器会把数组名转换为一个指针常量,是数转载 2011-12-07 18:53:44 · 650 阅读 · 0 评论 -
getch()、getche()和getchar()之间的区别
from:://www.cnitblog.com/mantou/archive/2011/11/03/1250.html 首先不要忘了,要用getch()必须引入头文件conio.h,以前学C语言的时候,我们总喜欢用在程序的末尾加上它,利用它来实现程序运行完了暂停不退出的效果。如果不加这句话,在TC2.0的环境中我们用Ctrl+F9编译并运行后,程序一运行完了就退回到TC环境中,我们根本来不转载 2011-12-11 21:42:11 · 666 阅读 · 0 评论 -
C/C++程序到内存分配个人总结
from:http://www.cnblogs.com/rusty/archive/2011/03/21/1990667.html#2061598一、一个由C/C++编译到程序占用的内存分为以下几个部分:1、栈区(stack)——由编译器自动分配释放,在不需要的时候自动清除。用于存放函数的参数、局部变量等。操作方式类似数据结构中的栈(后进先出)。2、堆区(heap)——一般由程序员分配转载 2011-12-14 21:08:52 · 517 阅读 · 0 评论 -
DEV C++ 实用技巧
1、DEV C++ 不能调试(1)tools->compiler option->settings->linker里设置为yes后,Generate debugging information,并且Rebuild All 了。(2)在“工具”-》编译选项-》"Add following commands when calling complier编译时加入下面命令"的编辑框里加上:转载 2012-01-02 22:13:19 · 1741 阅读 · 0 评论 -
声明和定义的区别
C++primer的解释是这样的: 变量的定义(definition):用于为变量分配存储空间,还可以为变量指定初始值。在一个程序中,变量有且仅有一个定义; 变量的声明(declaration):用于向程序表明变量的类型和名字。定义也是声明:当定义变量时我们声明了它的类型和名字。可以通过使用extern关键字声明变量名而不定义它。 以上解释讲得还是比较清楚的,有分配空转载 2012-01-02 20:13:21 · 902 阅读 · 0 评论 -
devc++5.0.0.9的调试方法
最近又开始了c++的学习,由于总是要用到调试的功能,在windows xp下的gdb总是不能很好的像linux里面来的纯正,所用起来不是很好(我安装的TDMGCC),还是用IDE来调试C++吧,爱已安装的codeblocks下调试不是很好,貌似不能调试的,不知哪位网友可以提示一下,于是就下载了DEV C++5.0.0.9(听说经典是4.9.9.2),开始也不能调试的,后来发现原因了:没有添加-g选原创 2012-01-02 21:54:17 · 3841 阅读 · 0 评论