http://www.csdn.net/ http://www.arm.com/zh/ https://www.kernel.org/ http://www.linuxpk.com/ http://www.51develop.net/ http://linux.chinaitlab.com/ http://www.embeddedlinux.org.cn http://bbs.pediy.com/
发布时间:2013-04-01 15:05:24
前面写过一篇北极之北之main函数之前,这篇文章其实解决的问题是main函数并不是第一个执行的函数,在main之前,函数的入口点是_start, _start会调用glibc里的__libc_start_main,main函数只是这个函数的入参。 在__libc_start_main中某一步,会执行main函数。这是上面一篇博文获取到的知识。 前两天,CU的gongping11写了一个博文atexit函数和exit函数的理解,这篇博文提到了atexit可以注册退出函数,在main之后,执行注册退出函数。讲的非常的好,我们......【阅读全文】
发布时间:2013-03-29 12:01:19
操作系统:ubuntu11.10编译环境:gcc测试实例:点击(此处)折叠或打开#include #include #include const char ro_1[ ] = {"this is read only data"}; &nb.........【阅读全文】
发布时间:2013-03-13 16:33:31
函数名与返回值类型在语义上不可冲突。违反这条规则的典型代表就是C 语言标准库函数getchar 。几乎没有一部名著没有提到getchar 函数,因为它实在太经典,太容易让人犯错误了。所以,每一个有经验的作者都会拿这个例子来警示他的读者,我这里也是如此:char c;c=getchar();if(EOF == c){…}按照getchar 名字的意.........【阅读全文】
发布时间:2013-03-04 16:55:13
new和delete运算符用于动态分配和撤销内存的运算符new用法: 1. 开辟单变量地址空间 1)new int; //.........【阅读全文】
发布时间:2013-03-04 16:09:20
已知类String的原型为: class String { public: String(const char *str = NULL); // 普通构造函数 .........【阅读全文】
发布时间:2013-02-03 16:03:45
setjmp和longjmp是C语言独有的,只有将它们结合起来使用,才能达到程序控制流有效转移的目的,按照程序员的预先设计的意图,去实现对程序中可能出现的异常进行集中处理。先来看一下这两个函数的定义吧:setjmp和longjmp的函数原型在setjmp.h中函数原型:int setjmp(jmp_buf envbuf);setjmp函数用缓冲.........【阅读全文】
发布时间:2013-01-09 11:33:46
最近看tty驱动源码,发现了一个以前老板上课时讲过的一个c语言技巧,不是很理解,上网学习了一下,总结如下: 在linux源码里 struct tty_buffer { struct tty_buffer *next; char *char_buf_ptr; unsigned char *flag_buf_ptr; int used; int size; int commit; int read; /* Data points here */ unsigned long data[0];......【阅读全文】
发布时间:2013-01-06 10:41:21
这句主要作用是提示编译器,对这个函数的调用需要像printf一样,用对应的format字符串来check可变参数的数据类型。例如:extern int my_printf (void *my_object, const char *my_format, ...)__attribute__ ((format (printf, 2, 3)));format (printf, 2, 3)告诉编译器,my_format相当于printf的format,而可变参数是从my_printf的第3个参数开始。这样编译器就会在编译时用和printf一样的check法则来确认可变参数是否正确了。......【阅读全文】
发布时间:2012-12-14 16:42:18
看一些程序的时候老是有“#ifdef __cplusplusextern "C" {#endif”的定义,搞搞清楚是怎么回事:Microsoft-Specific Predefined Macros__cplusplus Defined for C++ programs only. 意思是说,如果是C++程序,就使用extern "C"{而这个东东,是指在下面的函数不使用的C++的名字修饰,而是用C的The following code shows a header file which can be used by C and C++client applications:// MyCFu......【阅读全文】
发布时间:2012-12-14 16:40:59
如果直接操作结构体成员是不会取到不期望的值 但是对于要求连续数据格式的时候需要考虑对齐的问题 例如通讯中的数据帧格式等 ,如 ip数据包等#pragma pack(1) struct tagStruct { ... } t; #pragma pack() 的方式来强制连续存放 其中前面 pack(1) 是指对齐边界为 11。几个结构体例子:struct{short a1;short a2;short a3;}A;struct{long a1;short a2;}B;sizeof( ......【阅读全文】
发布时间:2012-12-14 16:38:47
/*creat a bittree*/#include "stdlib.h"#include "stdio.h"typedef struct BiTNode{ int data; struct BiTNode *lchild,*rchild;}BiTNode, *BiTree;BiTNode* getnode(){ BiTNode* p; p = (BiTNode*)m......【阅读全文】
发布时间:2012-12-14 16:36:57
测试代码:#include <stdio.h>int main(void){ int n = 0; int i = 0; &nbs......【阅读全文】
发布时间:2012-12-14 16:25:16
预编译(预处理)就是在正式编译之前的,为正式编译做准备,处理以#开头的指令。1, 在看linux内核代码时会看到某些结构体的定义中包含宏定义:12345678910111213struct i2c_msg { __u16 addr; /* slave address */  ......【阅读全文】
发布时间:2012-12-14 16:23:40
要理解.c文件与.h文件有什么不同之处,首先需要弄明白编译器的工作过程,一般说来编译器会做以下几个过程:1.预处理阶段2.词法与语法分析阶段3.编译阶段,首先编译成纯汇编语句,再将之汇编成跟CPU相关的二进制码,生成各个目标文件4.连接阶段,将各个目标文件中的各段代码进行绝对地址定位,生成跟特定平台相关的可执行文件,当然,最后还可以用objcopy生成纯二进制码,也就是去掉了文件格式信息 编译器在编译时是以c文件为单位进行的,也就是说如果你的项目中一个c文件都没有,那么你的项目将无法编译,连接器是以目标文件为单位,它将一个或多个目 标文件进行函数与变量的重定位,生成最终的可执行文件,在P......【阅读全文】