![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C语言的一些坑
文章平均质量分 84
unauthorized401
这个作者很懒,什么都没留下…
展开
-
12个有趣的C语言面试题
12个有趣的C语言面试题本文的12个C语言面试题,涉及指针、进程、运算、结构体、函数、内存,而且有趣,看看你能做出几个!1.gets()函数问:请找出下面代码里的问题#includeint main(void){ char buff[10]; memset(buff,0,sizeof(buff)); gets(buff); printf("\n The转载 2015-06-01 19:49:45 · 469 阅读 · 0 评论 -
C语言库函数总结
1、存储分配2、随机数生成3、数字转换4、环境通信5、搜索与排序6、整型算术7、多字节、宽字符和字符串转换8、时间与日期9、区域设置10、其它1、存储分配void* malloc(size_t size);void* calloc(size_t elt_count, size_t elt_size);void* realloc(size_t *p转载 2015-09-26 15:02:54 · 606 阅读 · 0 评论 -
Linux内核编码规范
这是一个简短的文档,描述了linux内核的首选代码风格。代码风格是因人而异的,而且我不愿意把我的观点强加给任何人,不过这里所讲述的是我必须要维护的代码所遵守的风格,并且我也希望绝大多数其他代码也能遵守这个风格。请在写代码时至少考虑一下本文所述的风格。首先,我建议你打印一份GNU代码规范,然后不要读它。烧了它,这是一个具有重大象征性意义的动作。不管怎样,现在我们开始:第一章:缩进制表符是8个字符,所以转载 2015-09-21 12:39:18 · 716 阅读 · 1 评论 -
Makefile交叉编译
Makefile交叉编译之前写的Makefile 范例。两个版本,For PC and Cross compile,以后直接用这个模板。include $(CLEAR_VARS) INCLUDE = -I. -I../include -I../zlib \ CFLAGS = $(INCLUDE) #FOR PC compile转载 2015-05-26 10:54:55 · 7419 阅读 · 0 评论 -
C/C++中extern关键字的用法
1 基本解释:extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。此外extern也可用来进行链接指定。 也就是说extern有两个作用,第一个,当它与"C"一起连用时,如: extern "C" void fun(int a, int b);则告诉编译器在编译fun这个函数名时按着C的规则去翻译相应的函数名而转载 2015-05-21 22:24:56 · 472 阅读 · 0 评论 -
makefile文件中.phony假想依赖的建立
makefile文件中.phony假象依赖的建立Phony TargetsPHONY 目标并非实际的文件名:只是在显式请求时执行命令的名字。有两种理由需要使用PHONY 目标:避免和同名文件冲突,改善性能。如果编写一个规则,并不产生目标文件,则其命令在每次make 该目标时都执行。例如: clean: rm *.o temp因为"rm"命令并不产生"clean"文件转载 2015-05-29 20:03:39 · 482 阅读 · 0 评论 -
GDB调试器使用总结
GDB调试器使用总结概述: GDB是linux下调试程序的神器,做为linux程序员,如果不能熟练的使用GDB进行程序调试,那将是很失败的事情。强大的功能使GDB的使用也变得比较复杂,如果是初学者肯定会比繁杂的命令吓到。下面是整理的一些我认为会比较有帮助的部分。下文中以">"开头的命令是linux的shell命令,以"(GDB)"开头的则是GDB内部命令。0.转储功能(core转载 2015-06-01 19:28:49 · 484 阅读 · 0 评论 -
C语言的代码内存布局详解
C语言的代码内存布局详解一个程序本质上都是由 BSS 段、data段、text段三个组成的。这样的概念在当前的计算机程序设计中是很重要的一个基本概念,而且在嵌入式系统的设计中也非常重要,牵涉到嵌入式系统运行时的内存大小分配,存储单元占用空间大小的问题。BSS段:在采用段式内存管理的架构中,BSS段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域。转载 2015-06-01 20:42:18 · 559 阅读 · 0 评论 -
Linux下性能分析工具和内存泄露检测工具的简介(Valgrind和gprof)
valgrind通常用来成分析程序性能及程序中的内存泄露错误一 Valgrind工具集简绍Valgrind包含下列工具:1、memcheck:检查程序中的内存问题,如泄漏、越界、非法指针等。2、callgrind:检测程序代码的运行时间和调用过程,以及分析程序性能。3、cachegrind:分析CPU的cache命中率、丢失率,用于进行代码优化。4、helgrind:用于检查多线程程序的竞态条件。5原创 2016-02-29 09:33:48 · 6027 阅读 · 4 评论 -
动态分配二维数组
为二维数组动态分配内存涉及以下两个问题:数组元素是否需要连续数组是否规则在这里我们暂时不考虑数组是否规则,我们从数组元素的分配是否连续考虑。已知第二维 // 数组指针 char (*a1)[COLUMNS]; a1 = (char(*)[COLUMNS])calloc(ROWS,sizeof(char*));已知第一维 // 指针数组 char *a2[RO原创 2016-05-21 16:35:00 · 508 阅读 · 0 评论 -
C语言单元测试框架Check
什么是CheckCheck是C语言的一个单元测试框架。它提供一个小巧的单元测试接口。测试案例运行在各自独立的地址空间,所以断言失败和代码错误造成的段错误或者其他的信号可以被捕捉到。另外,测试的结果显示也兼容以下这些格式:Subunit、TAP、XML和通用的日志格式。 Check is a unit testing framework for C. It features a simple in原创 2016-04-19 19:00:00 · 3678 阅读 · 1 评论 -
数组指针和指针数组的辨析
数组指针和指针数组的区别数组指针(也称行指针)定义 int (*p)[n];()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨过n个整型数据的长度。如要将二维数组赋给一指针,应这样赋值:int a[3][4];int (*p)[4]; //该语句是定义一个数组指针,指向含4个元素的转载 2015-06-10 19:41:48 · 432 阅读 · 0 评论 -
GCC扩展符(#,##)
“#”是将宏字符串化(Stringification),“##”是将##左右两边的标签组合在一起(token pasting or token concatenation),下面从两个简单例子着手: [cpp] #define SSVAR(X,Y) const char X[]=#Y SSVAR(InternetGatewayDevice, InternetGatewayDevice.);转载 2015-11-18 16:57:20 · 853 阅读 · 0 评论