编程规范
文章平均质量分 66
一枝春美食
这个作者很懒,什么都没留下…
展开
-
在linux上完成自己的my_ls命令的编写(对dirent.h的研究)
用惯了,ls,想看看ls是如何实现的或者自己写一个自己的ls脚本命令。 偶然在c++沉思录上看到这个问题。关于dirent.h的库。 首先看看dirent是个什么gui,来自无所不知谷歌的解释Dirent is an application programming interface (API) that enables programmers to list files and directo原创 2015-05-18 21:38:04 · 901 阅读 · 0 评论 -
linux0.12之main.c的工作流程分析
之前分析了head.s到main.c的跳转,下面看看mian.c的工作流程分析。 boot之后的执行代码是init目录下的main.c,执行初始化任务。研究一下 linus一开头就给出了四个内联静态函数static inline _syscall0(int,fork)static inline _syscall0(int,pause)static inline _syscall1(int,s原创 2015-06-18 08:54:31 · 641 阅读 · 0 评论 -
从链接、存储的角度去理解编译器对关键字的处理(static、extern等)
关于标识符的属性研究链接属性对于一个标识符而言,就链接角度分析,有external、internal、none,三种属性,如果整个工程处于一个文件,也就无所谓external了,在不同文件中需要相互引用时,会体现出external和internal的属性。None一般出现在函数中,比如定义的一个变量,因为其作用域仅限于函数,所以是作为独立个体,就比如在每个函数中使用for循环时,都可以定义 int原创 2015-06-01 20:23:06 · 536 阅读 · 0 评论 -
解决c/c++的sequence points和side effects问题
在看一篇文章时,提到这样一段代码#include <stdio.h>void foo(void){int a = 41;a = a++;printf("%d\n", a);}int main(void){foo();}本以为很简单嘛,就是不要忘了a赋值之后还要自己。其实是自己想的太简单了。 因为在vs2008和linux gcc下跑的结果不一样。研究一下这里面的原因。 在vs原创 2015-08-10 15:14:27 · 1061 阅读 · 1 评论 -
GNU LIBC源码学习之strcmp
比较两个字符串我的代码块#include <string.h>int my_strcmp(const char* s1,const char * s2){ if((s1==NULL)||(s2==NULL)) return 0; while(1) { if((*s1=='\0')||(*s2=='\0')) break; if(*s1>*s2) return 1;原创 2015-07-20 20:58:09 · 1113 阅读 · 0 评论 -
重新认识Segment fault
对于这个问题,只是之前听说过,并没有研究过。最近在oj编程时,vs上运行没有问题,提交时出现了段错误。为此重视一下这个问题。在维基上给出这个名词的定义 A segmentation fault occurs when a program attempts to access a memory location that it is not allowed to access, or attempt原创 2015-08-13 14:45:03 · 792 阅读 · 0 评论 -
C中柔性数组(flexible array)的学习
首先看看什么是柔性数组 C99中,结构中的最后一个元素允许是未知大小的数组,这就叫做柔性数组成员,但结构中的柔性数组成员前面必须至少一个其 他成员。柔性数组成员允许结构中包含一个大小可变的数组。sizeof返回的这种结构大小不包括柔性数组的内存。包含柔性数组成员的结构用malloc ()函数进行内存的动态分配,并且分配的内存应该大于结构的大小,以适应柔性数组的预期大小。 基本模型为typedef原创 2015-08-16 21:13:07 · 1562 阅读 · 0 评论 -
本以为理解const,其实那只是冰山一角
这里首先针对c中const来研究一下,对于c++中在后面的博客中分析。关于教科书里面的一些问题,比如初始化呀什么的,这里就不列举的,下面看看几个问题。第一个问题 看下面这个代码 编译有警告 看看运行结果 这是与我之前的理解又有差异了,在之前的理解是,a的值是不变的,因为这是常量折叠的问题,然而在linux gcc上的运行结果让我困惑了。 如果换到vs2008上,如下同样代码原创 2015-08-21 14:43:08 · 1098 阅读 · 4 评论 -
从汇编的角度理解为什么c样式函数使用时,实参尽量使用指针传递
如题,常常将参数传递时,用常值传递和用地址传递都是可以的,但是实际都是用指针来传递。这是在中兴面试时,想到的联系,可以用汇编层来理解。原创 2015-05-18 16:21:56 · 555 阅读 · 0 评论 -
从汇编语言层次追踪c代码的执行过程(return 的研究)
简单的hello world之前已分析过,这次分析return ,问题来源于points on c。 知道c函数中的返回值是通过eax寄存器返回的。对应的c就是 return a,但是,如果c代码就是return呢 实验一下gff@ubuntu:~/cplusplus/return$ cat retn.c #include<stdio.h> int back(int a,int b){原创 2015-05-23 20:08:12 · 1507 阅读 · 0 评论 -
关于程序命名的问题
之前在写程序时,对于程序的文件命名原创 2014-10-10 21:40:17 · 404 阅读 · 0 评论 -
堆和栈的区别 深入详解
堆和栈的区别 转载地址 非本人作也!因非常经典,所以收归旗下,与众人阅之!原作者不祥!堆和栈的区别一、预备知识—程序的内存分配一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放转载 2014-11-05 16:44:28 · 369 阅读 · 0 评论 -
c中变参函数的理解和编写(hello world引发的思考)
前面从编译链接的角度从新理解了hello world代码,这里还有个printf这个函数很神奇。参数可变。下载glibc库/stdio-common$ cat printf.c可以看到printf的源码/* Copyright (C) 1991-2013 Free Software Foundation, Inc. This file is part of the GNU C Lib原创 2015-03-18 19:49:44 · 894 阅读 · 0 评论 -
树的双亲表示法
之前学习树多是采用链表的,在羊村捕羊的算法上,采用了线性存储,为此学习一下。 双亲表示法区别于,链表,是用线性数组来存放树的。 既然是线性的,就用一维数组来完成,开始想法是,每个数组的元素为一个结构体。typedef struct node{char data;int father;int distance;}N,*PN;再用一个结构体将这个线性数组的信息包含起来typedef原创 2015-04-10 15:48:28 · 864 阅读 · 0 评论 -
看看c样式printf的压栈顺序
之前研究过变参函数的实现,再看看具体printf函数的压栈顺序。 看看之前写的汇编中利用call printf来完成字符的输出.section .dataoutput:.asciz "the processor vendor ID is '%s'\n".section .bss.lcomm buffer,12.section .text.globl _start_start: m原创 2015-04-13 15:50:50 · 486 阅读 · 0 评论 -
函数调用原理研究(不用传递参数的函数调用)
函数如何调用原创 2015-01-26 14:47:40 · 1491 阅读 · 0 评论 -
由strcat源码重新考虑‘\0’的问题
strcat函数在c中string.h的头文件中,是连接字符串的函数,看看源码char *strcat(char *strDest, const char *strScr) //将源字符串加const,表明其为输入参数{ char * address = strDest; //该语句若放在assert之后,编译出错 assert((strDest !=原创 2015-05-26 22:41:24 · 1004 阅读 · 0 评论 -
关于重入函数的资料总结
重入一般可以理解为一个函数在同时多次调用,例如操作系统在进程调度过程中,或者单片机、处理器等的中断的时候会发生重入的现象。一般浮点运算都是由专门的硬件来完成,举个例子假设有个硬件寄存器名字叫做FLOAT,用来计算和存放浮点数的中间运算结果假设有这么个函数void fun(){//...这个函数对FLOAT寄存器进行操作}假如第一次执行,有个对浮点数操作运算的结果临时存在FLOAT寄存原创 2016-01-18 09:19:39 · 328 阅读 · 0 评论