![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C/C++
文章平均质量分 81
sunyubo458
这个作者很懒,什么都没留下…
展开
-
vfork的错误用法
"每个任务(进程)有一个栈,在这个进程中每个函数被调用时分别从这个栈占用一段区域,称为帧(frame)。%esp寄存器指向当前整个栈的栈顶,%ebp指向当前帧的帧底。不是当前帧(调用者)的帧底都已经被压栈。上一级调用者的帧底被压入当前%ebp内容所指的地址,也就是当前帧的帧底位置保存了上一级调用者的%ebp指针值(帧底),而每个%ebp的前一个单元存放的就是当前函数的返回地址(它是由调用者在cal原创 2009-07-14 10:25:00 · 846 阅读 · 0 评论 -
GCC相关
转自: zzzppp.cublog.cn 细心之人啊 The History of GCC 1984年,Richard Stallman发起了自由软件运动,GNU (Gnus Not Unix)项目应运而生,3年后,最初版的GCC横空出世,成为第一款可移植、可优化、支持ANSI C的开源C编译器。GCC最初的全名是GNU C Compiler,之后,随着GCC支持的语言越来越转载 2009-07-15 17:25:00 · 598 阅读 · 0 评论 -
格式描述串
"格式描述串"是由一系列的"格式转换说明符号"组成,格式转换说明符号的描述形式如下: % [+][-] 0 m[.n] [输出精度] %c 字符 %d 十进制整数%e 浮点数,指数e的形式%s 字符串 %E 浮点数,指数E的形式%u 无符号十进制整数%f 浮点数,小数点形式%g 输出%f与%e较短者%o 无符号八进制整数转载 2009-07-15 10:31:00 · 1487 阅读 · 0 评论 -
strtol和十六进制转二进制
今天,在review 一些代码的时候,看到了strtol()这个函数,由于以前使用它的时候,还没有深刻的了解,这次,我决定探个究竟。网上关于这个函数的资料大都来源于同份资料,linux库函数,讲的不够细致。于是,我花了几个小时,认真地尝试其功能,并整理了这篇文章,希望能对C语言的爱好者一些帮助。希望大家能够将本文中发现的错误及时反馈给我,以便修正。我的信箱是wp.qin@sunmedi转载 2009-07-21 09:16:00 · 2163 阅读 · 0 评论 -
C语言常用宏定义技巧
1、防止一个头文件被重复包含#ifndef COMDEF_H#define COMDEF_H //头文件内容#endif2、重新定义 一些类型,防止由于各种平台和编译器的不同,而产生的类型字节数差异,方便移植。typedef unsigned char boolean; /* Boolean value type. */typedef unsigned long int u转载 2009-07-24 17:54:00 · 595 阅读 · 0 评论 -
关于gcc,libc等相关概念的理解
关于gcc,libc等相关概念的理解 1、gcc(gnu collect compiler)是一组编译工具的总称。它主要完成的工作任务是“预处理”和“编译”,以及提供了与编译器紧密相关的运行库的支持,如libgcc_s.so、libstdc++.so等。Linux系统下的Gcc(GNU C Compiler)是GNU推出的功能强大、性能优越的多平台编译器,是GNU的代表作品之一转载 2009-07-24 15:27:00 · 803 阅读 · 0 评论 -
位操作技巧实例大全
检测一个无符号数是不为2^n-1(^为幂): x&(x+1)将最右侧0位改为1位: x | (x+1)二进制补码运算公式:-x = ~x + 1 = ~(x-1)~x = -x-1 -(~x) = x+1~(-x) = x-1x+y = x - ~y - 1 = (x|y)+(x&y) x-y = x + ~y + 1 = (x|~y)-(~x&y) x转载 2009-07-24 17:52:00 · 485 阅读 · 0 评论 -
函数参数的类型
int arg(unsigned char a);int main(){ float b = 11.0; arg(b); return 0;}int arg(unsigned char a){ float c = 5.0; float d = 6.6; printf("a原创 2009-07-30 17:29:00 · 595 阅读 · 0 评论 -
stdarg.h中三个宏va_start ,va_arg和va_end的应用
#include #include const int N=5;using namespace std;void Stdarg(int a1,...){ va_list argp; int i; int ary[N]; va_start(argp,a1); ary[0]=a1; for(i=1;i< N;i++)转载 2009-07-30 17:59:00 · 496 阅读 · 0 评论 -
6个变态的C语言Hello World程序
下面的六个程序片段主要完成这些事情:输出Hello, World 混乱C语言的源代码下面的所有程序都可以在GCC下编译通过,只有最后一个需要动用C++的编译器g++才能编程通过。hello1.c 01. #define _________ } 02. #define ________ putchar 03. #defin转载 2009-08-21 11:50:00 · 1003 阅读 · 1 评论 -
一个有意思的东东 linux c打印自己的程序
test.c# include stdio. h> # include stdlib. h> extern char * _binary_test_c_start; int main( ) { printf ( "%s" , ( char * ) & _binary_test_c_start) ; printf("hahah/n"); }转载 2009-08-27 13:18:00 · 691 阅读 · 0 评论 -
堆和栈的区别
一、程序的内存空间一个典型的Linux C程序内存空间由如下几部分组成:代码段(.text)。这里存放的是CPU要执行的指令。代码段是可共享的,相同的代码在内存中只会有一个拷贝,同时这个段是只读的,防止程序由于错误而修改自身的指令。初始化数据段(.data)。这里存放的是程序中需要明确赋初始值的变量,例如位于所有函数之外的全局变量:i转载 2009-07-09 17:04:00 · 558 阅读 · 0 评论 -
calloc函数
calloc不同于malloc,是对所分配的内存初始化。测试程序如下:*****APUE中很重要的一句话:calloc将分配的内存空间初始化为0。但是ANSI C并不保证0值与浮点0或空指针的值相同。#include #include #include void calloc_int(void);void calloc_char(void);void calloc_原创 2009-07-09 17:30:00 · 2982 阅读 · 0 评论 -
do{}while(0)
在Linux内核中,经常会看到do{}while(0)这样的语句,许多人开始都会疑惑,认为do{}while(0)毫无意义,因为他只会执行一次,加不加do{}while(0)效果是完全一样的,其实do{}while(0)主要用于宏定义中。这里用一个简单点的宏来演示:#define SAFE_FREE(p) do { free(p); p转载 2009-07-09 17:53:00 · 510 阅读 · 0 评论 -
dup和dup2函数
1. 文件描述符在内核中数据结构 在具体说dup/dup2之前, 我认为有必要先了解一下文件描述符在内核中的形态。一个进程在此存在期间,会有一些文件被打开,从而会返回一些文件描述符,从shell中运行一个进程,默认会有3个文件描述符存在(0、1、2), 0与进程的标准输入相关联,1与进程的标准输出相关联,2与进程的标准错误输出相关联,一个进程当前转载 2009-07-09 18:26:00 · 2560 阅读 · 0 评论 -
fgets和gets
两者主要在安全性上存在差别。函数名: fgets功 能: 从流中读取一字符串用 法: char *fgets(char *string, int n, FILE *stream);形参注释:*string输入数据的首地址;n-1:一次读入数据块的长度,其默认值为1k,即1024;stream文件指针序 例:#include #include转载 2009-07-09 18:28:00 · 1246 阅读 · 0 评论 -
不能姑息任何编码错误
很多文章都是讲如何书写正确的代码,如何书写高效的代码,其实代码中的错误、BUG才是真正应该正视的。非常感谢下面这位分享经验的前辈!warning比error更重要!!!!引用——“只有你不给自己留退路,你才会真正关心代码质量”1、错误必须正确分类网线断掉、硬件不稳定等等都是正常情况,设计师必须预先考虑到这些,设置合理的处理/恢复逻辑。代码中的逻辑错误原创 2009-07-09 18:29:00 · 963 阅读 · 0 评论 -
计算一个无符整数中1Bit的个数
原创整理,转载请注明出处。 这是一个经常遇到的经典问题,这里分两个部分讲解和总结,首先对讲解现有的算法,然后再讲解一些 改进 算法。1.循环法(Iterated Count ) int bitcount (unsigned int n) { int count=0; while (n) { count += n & 0x1u ; n转载 2009-07-09 18:37:00 · 2657 阅读 · 2 评论 -
引用和指针的区别
引用和指针★ 相同点:1. 都是地址的概念; 指针指向一块内存,它的内容是所指内存的地址;引用是某块内存的别名。★ 区别:1. 指针是一个实体,而引用仅是个别名;2. 引用使用时无需解引用(*),指针需要解引用;3. 引用只能在定义时被初始化一次,之后不可变;指针可变; 引用“从一而终” ^_^4. 引用没有 const,指针有 co转载 2009-07-09 18:43:00 · 601 阅读 · 0 评论 -
Fibonacci数列
很令人惊讶,Fibonacci数列竟然可以用对数时间复杂度完成。一下是三个版本的求解:第一个是最原始的,指数时间复杂度。第二个是线性记忆的,线性时间复杂度。第三个是用矩阵记忆的,对数时间复杂度! /* Three versions of Fibonacci Number Computation Nan Wang Univer转载 2009-07-09 18:42:00 · 671 阅读 · 0 评论 -
单向链表的几道题
1. 转置单向链表 (也就是反序,注意链表的边界条件并考虑空链表)。#include struct listtype{ int data; struct listtype * next;};typedef struct listtype * list;/* Reverse the singly li转载 2009-07-09 18:43:00 · 639 阅读 · 0 评论 -
结构体和类的区别
1. C++ 中类与结构体的区别答:类成员默认访问权限为私有(private),结构体成员默认访问权限为公共(public),其他地方完全一样。---------------------------------------------------------------------------2. 关于私有继承私有继承实际上和组合比较相像,应该说是一转载 2009-07-09 18:44:00 · 1031 阅读 · 0 评论 -
C/C++中的日期和时间 time_t与struct tm转换
Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4 <! /* Styl转载 2009-09-15 14:25:00 · 983 阅读 · 0 评论 -
rand()和srand()函数
标准库(被包含于中)提供两个帮助生成伪随机数的函数: 函数一:int rand(void);从srand (seed)中指定的seed开始,返回一个[seed, RAND_MAX(0x7fff))间的随机整数。 函数二:void srand(unsigned seed);参数seed是rand()的种子,用来初始化rand()的起始值。 可以认为rand()在转载 2009-11-03 17:22:00 · 924 阅读 · 0 评论 -
内核代码中一个逗号表达式比较特别的用法
内核代码sch_fifo.c中有这么一行代码:CODE:u32 limit = sch->dev->tx_queue_len ? : 1;在另外一个地方,看到有朋友分析这段代码时,提到了这个执行的结果是limit取sch->dev->tx_queue_len的值,如果该值小于1,则至少为1.我们常用的"? :"是三目运算符,这里好像没有“:”左边没有任何成员。转载 2009-11-04 11:04:00 · 714 阅读 · 0 评论 -
EMC的一个笔试题目
同学参加了EMC的笔试回来,说了一个EMC的一个笔试题目,他没有答上来,就问我。我感觉很有意思,就拿出来分析一下。======================================int main(int argc, char* argv[]){ fork(); fork() && fork() || fork(); fork();}转载 2009-11-04 10:33:00 · 843 阅读 · 0 评论 -
C语言陷阱和缺陷
[1] [译序]那些自认为已经“学完”C语言的人,请你们仔细读阅读这篇文章吧。路还长,很多东西要学。我也是……[概述]C语言像一把雕刻刀,锋利,并且在技师手中非常有用。和任何锋利的工具一样,C会伤到那些不能掌握它的人。本文介绍C语言伤害粗心的人的方法,以及如何避免伤害。0 简介 1 词法缺陷 .1 = 不是 ==转载 2009-11-26 10:27:00 · 740 阅读 · 0 评论 -
C语言出错信息速查
Ambiguous operators need parentheses不明确的运算需要用括号括起Ambiguous symbol ``xxx``不明确的符号Argument list syntax error参数表法Array bounds missing丢 失数界限符Array size toolarge数尺寸太大Bad character in paramenters参数中有不适当的字符Ba转载 2009-12-09 15:11:00 · 547 阅读 · 0 评论 -
断言(assert宏)的副作用
断言(assert宏)的副作用 我的确对#define的很多种用法都深恶痛绝,唯对定义在中的assert宏情有独钟。说句实话,我鼓励大家多多使用它--前提是用好它。但问题就在于能不能用好它。 实现的方式固然百家争鸣,不过assert宏多数情况下和下面的定义相差不远: gotcha28/myassert.h #ifndef NDEBUG #define assert(e) ((e)转载 2010-03-04 09:54:00 · 1711 阅读 · 0 评论 -
直接修改栈的实例
1 [bobo]$ cat gotover.c2 #include stdio.h>3 #include string.h>4 5 int evil_code(char *s)6 {7 printf("hi, I am here!/n");转载 2010-03-12 17:57:00 · 676 阅读 · 0 评论 -
C/C++ 预编译命令
(一)基本知识 预处理器指示符以“#”号开头标识,处理这些指示符的程序叫做预处理器。 #include指示符读入指定文件的内容,它有两种格式: #include #include "my_file.h" 如果文件名用 们可以通过设置环境变量或命令行来修改这些目录。如果文件名用“”引起来,则表明该文件是用户提供的转载 2010-01-06 11:15:00 · 900 阅读 · 1 评论 -
vim常用命令
http://blog.csdn.net/wooin/archive/2007/10/31/1858917.aspx 好文 下面是我常用的一些命令, 放在这里供我备忘: 新学习到的命令: 1. 重复最近的文本操作:使用点号键(.)2. 筛选功能:在vi 中按 Escape,输入 :!command(其中的 command 是要执行的 UNIX 命令),然后按回车,就可以在转载 2010-01-06 20:27:00 · 2464 阅读 · 1 评论 -
Vim个人配置文件
这几天一直在配置自己的Vim工作环境,主要是对~/.vimrc的配置。以《史上最牛的Vim配置文件》为基础,形成自己的Vim环境,不过看了几天,整个.vimrc还是只看明白了20%.vimrc内容如下:——————————————————————————————————————"""""""""""""""""""""""""""""""""""""""""""""""""""""原创 2010-01-14 10:52:00 · 1082 阅读 · 0 评论 -
min宏定义探究
min宏定义探究 在GCC的文档中建议使用如下的min宏定义: 引用:#define min(X,Y) / (__extension__ / ({ / typeof(X) __x=(X), __y=(Y); / (__x}) / ) 本文讨论了这样作法的意义。 1、传统的min带来的副作用 2、转载 2010-04-09 06:49:00 · 897 阅读 · 0 评论 -
vim使用技巧
#------------------------------------------------/joe/e ;: 设置光标到匹配"joe"的末尾 /joe/e+1 ;: 设置光标到匹配"joe"的末尾再后移一位 /joe/s-2 ;: 设置光标到匹配"joe“的开头再前移两位 /joe/+3 ;: 搜索“joe” 找到后将光标下移3行 /^joe.*fred.*bill/ ;: 匹配以j转载 2010-04-26 08:29:00 · 643 阅读 · 0 评论 -
再发一个vim配置文件(ubuntu)
这个是在家的ubuntu系统上用的原创 2010-07-04 09:56:00 · 1568 阅读 · 0 评论 -
C 和 C++ 字符串字面量的比较
C 和 C++ 字符串字面量(String Literal)既有相同之处,又有一些区别。转载 2010-07-20 07:04:00 · 455 阅读 · 0 评论 -
fgetc, EOF 及其它
fgetc 的一些问题原创 2010-07-20 06:51:00 · 591 阅读 · 0 评论 -
使用二维数组遇到的问题
1. 二维数组就是一块连续的存储空间,只是采取下标寻址时才会当成表格。例如:#define V_NUM 10 #define H_NUM 20 char table[V_NUM][H_NUM]; 定义一个这样的二维数组,对于下面这种循环打印才把它看作是一个长度为H_NUM,高度为V_NUM的表格(如*图)。for(i=0; i{ for(j=0; j原创 2010-05-14 09:32:00 · 588 阅读 · 0 评论 -
#include_next的语意
#include_next的语意 继承和头文件 继承是对象或者文件通过拷贝其它对象或文件的内容,从而衍生出一个新的对象。对于C语言的头文件来说,继承就是一个头文件包含另一个头文件,然后更改(如更改一些宏的值)或增加一些内容。 如果衍生头文件和基础头文件(base header file)的文件名不同,处理方法很简单,只需在衍生头文件中包含基础头文件即可#include "basic"(base指代原创 2010-05-25 13:42:00 · 744 阅读 · 0 评论