c/c++
fengyuruhui
这个作者很懒,什么都没留下…
展开
-
fork and vfork
文章一:fork 与 vfork函数 http://shichen515.blog.sohu.com/68965577.html 一、fork1. 调用方法#include #include pid_t fork(void);正确返回:在父进程中返回子进程的进程号,在子进程中返回0错误返回:-1 子进程是父进程的一个拷贝。即,子进程从父进程得到了数据段和堆栈段的拷转载 2008-10-30 14:48:00 · 978 阅读 · 2 评论 -
探索C++的秘密之详解extern "C"
时常在cpp的代码之中看到这样的代码: #ifdef __cplusplus extern "C" { #endif //一段代码 #ifdef __cplusplus } #endif 这样的代码到底是什么意思呢?首先,__cplusplus是cpp中的自定义宏,那么定义了这个宏的话表示这是一段cpp的代码,也就是说,上面的代码的含义是:如果这是一段cpp的代码,那么加入exte转载 2007-10-04 15:16:00 · 644 阅读 · 0 评论 -
strcpy 和 strncpy
库函数 extern char *strcpy(char *dest,char *src)用法:#include 功能:把src所指由NULL结束的字符串复制到dest所指的数组中。 说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。 返回指向dest的指针。 注意:strcpy不是遇到/0就不复制了 ,复转载 2007-09-13 16:08:00 · 2473 阅读 · 1 评论 -
伤心的内存对齐~~~
/** 结构体中的内存对齐*/#include stdio.h>#pragma pack(4) //指定按4字节对齐int main(void){ struct align { struct tmp { char a; unsigned short int i; char b原创 2007-08-26 15:46:00 · 1025 阅读 · 1 评论 -
tree 的编译选项--支持大文件
The main distribution site for tree is here: ftp://mama.indstate.edu/linux/tree/CFLAGS:CFLAGS=-O2 -Wall -fomit-frame-pointer -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64LDFLAGS=-s 由于在32转载 2007-08-22 14:37:00 · 924 阅读 · 0 评论 -
getchar()的返回值类型
13.1 这样的代码有什么问题?《误区》中提到的: char c; while((c = getchar()) != EOF) ... 1.保存 getchar 的返回值的变量必须是 int 型。getchar() 可能返回任何字符值, 包括 EOF。2.如果把 getchar 的返回值截断为 char 型, 则正常的字符可能会被错误的解释为 EOF, 或者 EOF 可能会被修转载 2007-08-21 18:58:00 · 3929 阅读 · 0 评论 -
a[3] = "abc"
12.23 a[3] = "abc"; 合法吗?它是什么意思? 尽管只在极其有限的环境下有用, 可它在 ANSI C (可能也包括一些 ANSI 之前的系统) 中是合法的。它声明了一个长度为 3 的数组, 把它的三个字符初始化为 a, b 和 c, 但却没有通常的 /0 字符。因此该数组并不是一个真正的 C 字符串从而不能用在 strcpy, printf %s 等当中。转载 2007-08-21 18:42:00 · 1224 阅读 · 0 评论 -
C语言const 限定词真正的含义“只读的”
不能象这样在初始化和数组维度中使用常量:const int n = 5; int a[n]; const 限定词真正的含义是 ``只读的"; 用它限定的对象是运行时 (同常) 不能被赋值的对象。因此用 const 限定的对象的值并 不完全是一个真正的常量。在这点上 C 和 C++ 不一样。如果你需要真正的运行时常量, 使用预定义宏 #define (或enum)。 在c++代码转载 2007-08-21 17:00:00 · 1422 阅读 · 0 评论 -
C 语言中的字符常数是 int 型
C 语言中的字符常数是 int 型, 因此 sizeof(a) 是 sizeof(int), 这是另一个与 C++ 不同的地方。 char ch=‘a’; // sizeof(ch)--->sizeof(int)char a; // sizeof(a) ---->sizeof(char)转载 2007-08-21 15:23:00 · 1899 阅读 · 1 评论 -
《C语言解惑》之 谜题1.3 逻辑操作符和增量操作符
谜题1.3 逻辑操作符和增量操作符请问,下面这个程序的输出是什么?#define PRINT(int) printf("%d/n",int) main(){ int x, y转载 2007-08-18 17:07:00 · 858 阅读 · 0 评论 -
《C语言解惑》之谜题2.2 整数和浮点数的转换
谜题2.2 整数和浮点数的转换请问,下面这个程序的输出是什么?#include #define PR(x) printf(#x " = %.8g/t",(double)x)#define NL putchar(’/n’ )#define PRINT4(x1,x2,x3,x4) PR(x1); PR(x2); PR(x3); PR(x4); NLmain(){转载 2007-08-18 14:23:00 · 1388 阅读 · 0 评论 -
malloc 注意事项
在 ANSI/ISO 标准 C 引入 void * 泛型指针类型之前, 这种类型转换通常用于在不兼容指针类型赋值时消除警告 (或许也可能导致转换)。 在 ANSI/ISO 标准 C 下, 这些转换不再需要, 而起事实上现代的实践也不鼓励 这样做, 因为它们可能掩盖 malloc() 声明错误时产生的重要警告; (但是, 因为这样那样的原因, 为求与 C++ 兼容, C 程序中 常常能见转载 2007-08-21 13:39:00 · 1089 阅读 · 0 评论 -
sprintf详解
sprintf详解 转摘声明:选自《CSDN 社区电子杂志——C/C++杂志》在将各种类型的数据构造成字符串时,sprintf 的强大功能很少会让你失望。由于sprintf 跟printf 在用法上几乎一样,只是打印的目的地不同而已,前者打印到字符串中,后者则直接在命令行上输出。这也导致sprintf 比printf 有用得多。sprintf 是个变参函数,定义如下:int sprintf(转载 2007-10-29 09:39:00 · 932 阅读 · 0 评论 -
Linux常用C函数—内存及字符串操作篇
bcmp(比较内存内容) 相关函数 bcmp,strcasecmp,strcmp,strcoll,strncmp,strncasecmp表头文件 #include定义函数 int bcmp ( const void *s1,const void * s2,int n);函数说明 bcmp()用来比较s1和s2所指的内存区间前n个字节,若参数n为0,则返回0。返回值 若参数s1 和s2转载 2007-10-29 09:45:00 · 814 阅读 · 0 评论 -
C Static 详解
static 声明的变量在C语言中有两方面的特征:1)、变量会被放在程序的全局存储区中,这样可以在下一次调用的时候还可以保持原来的赋值。这一点是它与堆栈变量和堆变量的区别。2)、变量用static告知编译器,自己仅仅在变量的作用范围内可见。这一点是它与全局变量的区别。Tips:A.若全局变量仅在单个C文件中访问,则可以将这个变量修改为静态全局变量,以降低模块间的耦合度;B.若全局变量仅由转载 2007-11-14 17:07:00 · 1281 阅读 · 0 评论 -
snprintf/_snprintf 在不同平台间函数差异
文章一:http://www.cppblog.com/sandy/archive/2006/09/29/13133.html谈谈snprintf 众所周知,sprintf不能检查目标字符串的长度,可能造成众多安全问题,所以都会推荐使用snprintf.snprintf(_snprintf)的声明是这样的int _snprintf( char *buffer, size_t co转载 2008-10-24 23:11:00 · 9498 阅读 · 1 评论 -
位操作
1.不依赖机器的位转置unsigned int reverse_bits(unsigned int value){ unsigned int answer = 0; for(int i=1; i!=0; i { answer if (value & 1) { a原创 2008-10-20 14:35:00 · 578 阅读 · 0 评论 -
malloc, free, new and delete
文章一:http://dev.csdn.net/article/20/20654.shtm有了malloc/free为什么还要new/delete ? malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。对象在创建的同时要转载 2008-10-21 23:53:00 · 989 阅读 · 0 评论 -
gdb 调试
文章一:GDB调试精粹及使用实例http://www.yuanma.org/data/2007/0909/article_2847.htm 一:列文件清单 1. List (gdb) list line1,line2 二:执行程序 要想运行准备调试的程序,可使用run命令,在它后面可以跟随发给该程序的任何参数,包括标准输入和标准输出说明符()和外壳通配符(*、?、[、])在内。原创 2008-10-17 16:03:00 · 566 阅读 · 0 评论 -
c语言声明与初始化
2.12 这样的初始化有什么问题?char *p = malloc(10); 编译器提示 ``非法初始式" 云云。 这个声明是静态或非局部变量吗?函数调用只能出现在自动变量 (即局部非静态变量) 的初始式中。 2.13 以下的初始化有什么区别?char a[] = "string literal"; char *p = "string literal"; 当我向 p[转载 2008-10-17 14:32:00 · 955 阅读 · 0 评论 -
core dump
文章一:Core Dump技术介绍http://blog.csdn.net/yclz/archive/2008/04/12/2284264.aspx 在开发和使用Linux程序时,我们最怕的就是莫过于程序莫明其妙的当掉了,虽然对整个系统来说是没有什么影响,但对于程序使用尤其是程序开发者来说,这显然是难以忍受的,有这样一种技术,操作系统把程序当掉时的内容保存起来,让我们在程序开发转载 2008-10-17 15:57:00 · 2804 阅读 · 0 评论 -
memcpy and memmove
12.25 memcpy() 和 memmove() 有什么区别? 如果源和目的参数有重叠, memmove() 提供有保证的行为。而 memcpy() 则不能提供这样的保证, 因此可以实现得更加有效率。如果有疑问, 最好使用 memmove()。 参考资料: [K&R2, Sec. B3 p. 250]; [ISO, Sec. 7.11.2.1, Sec. 7.11.2.2]; [R转载 2008-10-17 10:36:00 · 1987 阅读 · 2 评论 -
预编译头文件
预编译头文件今天在改一个很大的程序,慢慢看,慢慢改。突然发现一个.c文件,里面什么也没有, 就几个头文件,我一看,我靠,这不是把简单的问题搞复杂了吗,随手删掉那个c文件。 结果不能编译了,我靠: fatal error C1083: Cannot open precompiled header file: /Debug/v13_3.pch/: No such file转载 2008-06-12 13:42:00 · 504 阅读 · 0 评论 -
命令行编译Solution
>devenv.com /? Microsoft (R) 开发环境 7.10.3077 版。 版权所有(C) Microsoft Corp 1984-2001。保留所有权利。 用法: devenv [solutionfile | projectfile | anyfile.ext] [switches] 可以调用 devenv,用第一个参数指定解决方案文件或项目文件。转载 2007-12-25 15:59:00 · 853 阅读 · 0 评论 -
Using Visual C++ 2005 Express Edition with the Microsoft Platform SDK
转载 2007-12-25 14:30:00 · 901 阅读 · 0 评论 -
可变参数宏
在 GNU C 中,宏可以接受可变数目的参数,就象函数一样,例如:#define pr_debug(fmt,arg...) /printk(KERN_DEBUG fmt,##arg)用可变参数宏(variadic macros)传递可变参数表你可能很熟悉在函数中使用可变参数表,如: void printf(const char* format, …);直到最近,可变参数表还是只转载 2007-11-28 14:49:00 · 1223 阅读 · 0 评论 -
动态指针变量不能作为返回值!
注意下面的代码,本意是想返回一个字符串, 但当它返回调用者的时候, 返回串却是垃圾信息。 : char *itoa(int n) { char retbuf[20]; /* 错!redbuf为自动变量*/ sprintf(retbuf, "%d", n); return retbuf; /* 错!自动变量此时将销毁*/ }一种转载 2007-08-21 13:23:00 · 962 阅读 · 0 评论 -
确保往明确分配的可写空间写入
8 .1 为什么这段代码不行?char *answer; printf("Type something:/n");gets(answer); printf("You typed /"%s/"/n", answer); 指针变量 answer, 传入 gets(), 意在指向保存得到的应答的位置, 但却没有指向任何合法的位置。换言之, 我们不知道转载 2007-08-21 12:57:00 · 615 阅读 · 0 评论 -
7.13 我该如何动态分配多维数组 ?
7.13 我该如何动态分配多维数组 ? 传统的解决方案是分配一个指针数组, 然后把每个指针初始化为动态分配的 ``列"。 以下为一个二维的例子: #include int **array1 = malloc(nrows * sizeof(int *)); for(i = 0; i < nrows; i++) array1[i] = malloc(ncolu转载 2007-08-20 21:29:00 · 1133 阅读 · 1 评论 -
c陷阱与缺陷
风格与指南 使用一种使代码具有可读性和一致性的源代码风格。如果没有团队代码风格或自己的风格,您可以使用与大多数 C 程序员采用的 Kernighan 和 Ritchie 风格相似的风格。然而,举一个极端的例子,有可能最终会写出与下面相似的代码:转载 2007-08-13 19:59:00 · 830 阅读 · 0 评论 -
C语言中的位运算
在计算机程序中,数据的位是可以操作的最小数据单位,理论上可以用“位运算”来完成所有的运算和操作。一般的位操作是用来控制硬件的,或者做数据变换使用,但是,灵活的位操作可以有效地提高程序运行的效率。C语言提供了位运算的功能, 这使得C语言也能像汇编语言一样用来编写系统程序。 位运算符C语言提供了六种位运算符: & 按位与 | 按位或 ^ 按位异或 ~ 取反 >> 右移转载 2007-08-13 19:01:00 · 692 阅读 · 0 评论 -
GCC 使用指南
GCC 使用指南 使用语法:gcc [ option | filename ]... g++ [ option | filename ]... 其中 option 为 gcc 使用时的选项(后面会再详述), 而 filename 为欲以 gcc 处理的文件 说明:这 C 与 C++ 的 compiler 已将产生新程序的相关程序整合起来。产 生一个新的程序需要经过四个阶段:预处理、编译、汇转载 2007-04-24 12:34:00 · 694 阅读 · 0 评论 -
C/C+语言struct"深层"探索
1. struct的巨大作用 面对一个人的大型C/C++程序时,只看其对struct的使用情况我们就可以对其编写者的编程经验进行评估。因为一个大型的C/C++程序,势必要涉及一些(甚至大量)进行数据组合的结构体,这些结构体可以将原本意义属于一个整体的数据组合在一起。从某种程度上来说,会不会用struct,怎样用struct是区别一个开发人员是否具备丰富开发经历的标志。转载 2007-07-08 09:29:00 · 846 阅读 · 0 评论 -
C/C++ 误区五:char c = getchar();
许多初学者都习惯用 char 型变量接收 getchar、getc,fgetc 等函数的返回值,其实这么做是不对的,并且隐含着足以致命的错误。getchar 等函数的返回值类型都是 int 型,当这些函数读取出错或者读完文件后,会返回 EOF。EOF 是一个宏,标准规定它的值必须是一个 int 型的负数常量。通常编译器都会把 EOF 定义为 -1。问题就出在这里,使用 char 型变转载 2007-07-08 08:55:00 · 2787 阅读 · 3 评论 -
C/C++ 误区四:强制转换 malloc() 的返回值
首先要说的是,使用 malloc 函数,请包含 stdlib.h(C++ 中是 cstdlib),而不是 malloc.h 。因为 malloc.h 从来没有在 C 或者 C++ 标准中出现过!因此并非所有编译器都有 malloc.h 这个头文件。但是所有的 C 编译器都应该有 stdlib.h 这个头文件。 在 C++ 中,强制转换 malloc() 的返回值是必须的,否转载 2007-07-08 08:45:00 · 1286 阅读 · 1 评论 -
C/C++ 误区三:fflush(stdin)
1. 为什么 fflush(stdin) 是错的 首先请看以下程序: #include stdio.h> int main( void ){ int i; for (;;) { fputs("Please input an integer转载 2007-07-08 08:41:00 · 969 阅读 · 1 评论 -
C/C++ 误区二:void main()
很多人甚至市面上的一些书籍,都使用了void main( ) ,其实这是错误的。C/C++ 中从来没有定义过void main( ) 。C++ 之父 Bjarne Stroustrup 在他的主页上的 FAQ 中明确地写着 The definition void main( ) { /* ... */ } is not and never has been C++, nor h转载 2007-07-07 21:41:00 · 10079 阅读 · 4 评论 -
C/C++ 常见误区一
1. C++虽然主要是以C的基础发展起来的一门新语言,但她不是C的替代品,不是C的升级,C++和C是兄弟关系。没有谁比谁先进的说法,更重要的一点是C和C++各自的标准委员会是独立的,最新的C++标准是C++98,最新的C标准是C99。因此也没有先学C再说C++的说法,也不再(注意这个"不再")有C++语法是C语法的超集的说法。2. C++/CLI 和 C# 是微软的,它们与C和C++没有任何转载 2007-07-07 21:29:00 · 1622 阅读 · 1 评论 -
The Constructor Initializer in c++
class A { public: A():a({1,2}) { }; private: const int a[2]; }; 编译过不了!请帮忙解释一下,谢谢 解释:1.类里面的任何成员变量在定义时是不能初始化的。 2.一般的数据成员可以在构造函数中初始化。 3转载 2007-07-07 20:15:00 · 2598 阅读 · 0 评论 -
内存对齐与ANSI C中struct型数据的内存布局 选择自 soloist 的 Blog
当在C中定义了一个结构类型时,它的大小是否等于各字段(field)大小之和?编译器将如何在内存中放置这些字段?ANSI C对结构体的内存布局有什么要求?而我们的程序又能否依赖这种布局?这些问题或许对不少朋友来说还有点模糊,那么本文就试着探究它们背后的秘密。 首先,至少有一点可以肯定,那就是ANSI C保证结构体中各字段在内存中出现的位置是随它们的声明顺序依次递增的,并且第一转载 2007-06-24 14:02:00 · 504 阅读 · 0 评论