随笔分类 -  c

摘要:原文地址:http://www.cnblogs.com/skynet/archive/2011/03/07/1975479.html为什么需要知道C/C++的内存布局和在哪可以可以找到想要的数据?知道内存布局对调试程序非常有帮助,可以知道程序执行时,到底做了什么,有助于写出干净的代码。本文的主要内容如下:源文件转换为可执行文件可执行程序组成及内存布局数据存储类别一个实例总结源文件转换为可执行文件源文件经过以下几步生成可执行文件:1、预处理(preprocessor):对#include、#define、#ifdef/#endif、#ifndef/#endif等进行处理2、编译(compiler 阅读全文
posted @ 2011-07-23 08:00 wangkangluo1 阅读(473) 评论(0) 推荐(0)
摘要:原文地址:http://www.cnblogs.com/takeaction/archive/2010/12/26/1917050.html举个简单的例子我们有个32位的一个变量A而我们还可能需要用到A的低16位AL这个时候我们就可以定义一个联合就可以表示AL了若16需再次划分,那么可以在联合中再次用一次联合写个例子你看下#include <stdio.h>typedef union { unsigned int Ax; struct AX { unsigned int AL:16; unsigned int AH:16; }sAX;}example;int main(void){ 阅读全文
posted @ 2011-07-22 22:40 wangkangluo1 阅读(296) 评论(0) 推荐(0)
摘要:原文地址:一.找错题试题1:void test1(){ char string[10]; char* str1 = "0123456789"; strcpy( string, str1 );}试题2:void test2(){ char string[10],str1[10]; int i; for(i=0; i<10; i++) { str1 = 'a'; } strcpy( string, str1 );}试题3:void test3(char* str1){ char string[10]; if( strlen( str1 ) <= 10 阅读全文
posted @ 2011-07-22 16:00 wangkangluo1 阅读(649) 评论(0) 推荐(0)
摘要:原文地址:http://www.cnblogs.com/fangyukuan/archive/2010/09/18/1829871.html这些东西有点烦,有点无聊。如果要去C++面试就看看吧。几年前网上搜索的。刚才看到,就整理一下,里面有些被我改了,感觉之前说的不对或不完善。1.求下面函数的返回值( 微软)int func(x) { int countx = 0; while(x) { countx ++; x = x&(x-1); } return countx; } 假定x = 9999。 答案:8思路:将x转化为2进制,看含有的1的个数。2.什么是“引用”?申明和使用“引用”要 阅读全文
posted @ 2011-07-22 15:59 wangkangluo1 阅读(748) 评论(0) 推荐(0)
摘要:a.h#ifndef A_H_ #define A_H_typedef long int int4;#define MAX( x, y ) ( ((x) > (y)) ? (x) : (y) )#define g_new(structs) malloc(sizeof(... 阅读全文
posted @ 2011-07-21 10:52 wangkangluo1 阅读(379) 评论(0) 推荐(0)
摘要:源码:编译:gcc -g -Wall -O0 strings.c -o strings -lm/* * ===================================================================================== * * Filename: strings.c * * Description: * * Version: 1.0 * Created: 07/20/2011 06:01:17 PM * Revision: none * Compiler: gcc * * Author: kangle.wang (mn), wangkan 阅读全文
posted @ 2011-07-20 19:11 wangkangluo1 阅读(5022) 评论(0) 推荐(1)
摘要:原文地址:http://hi.baidu.com/bellgrade/blog/item/8143f7f8cb835f55242df267.html某些情况下希望函数的参数个数可以根据需要确定。典型的例子有大家熟悉的函数printf()、scanf()和系统调用execl()等。那么它们是怎样实现的呢?C编译器通常提供了一系列处理这种情况的宏,以屏蔽不同的硬件平台造成的差异,增加程序的可移植性。这些宏包括va_start、va_arg和va_end等。采用ANSI标准形式时,参数个数可变的函数的原型声明是:type funcname(type para1, type para2, ...)这种 阅读全文
posted @ 2011-07-19 16:03 wangkangluo1 阅读(768) 评论(0) 推荐(0)
摘要:原文地址:http://hi.baidu.com/joyeep/blog/item/2ad5f662e00f41dce7113a37.html水平不高不低的C++程序员最喜欢挂在嘴上的一句话就是:C宏,万恶之首,错误的开端,应该被弃。例一、用C宏,书写代码更简洁这段代码写网络程序的朋友都很眼熟,是Net/3中mbuf的实现。struct mbuf{ struct m_hdr mhdr; union { struct { struct pkthdr MH_pkthdr; /* M_PKTHDR set */ union { struct m_ext MH_ext; /* M_EXT set */ 阅读全文
posted @ 2011-07-19 15:59 wangkangluo1 阅读(443) 评论(0) 推荐(0)
摘要:原文地址:http://hi.baidu.com/bellgrade/blog/item/391c1b2b8cd932325343c1b9.html从一个相对简单的例子说起吧。view plainprint?#define f(a,b) a##b#define g(a) #a#define h(a) g(a) h(f(1,2)) g(f(1,2))相信不少人都见过这个例子。我们不妨再仔细分析一下它的解析过程。应该是这样的:对于g(f(1,2)),预处理器看到的先是g,然后是(,说明这是一个函数式的宏,好,然后替换后面的实参f(1, 2),得到#f(1,2)(注:直接这么写非法,这里只是为了表示 阅读全文
posted @ 2011-07-19 15:52 wangkangluo1 阅读(1623) 评论(0) 推荐(0)
摘要:原文地址:http://hi.baidu.com/bellgrade/blog/item/7d07ff12ab6fa0085aaf5393.html此文为宏的妙用,单击此处访问宏的详细说明文章1,防止一个头文件被重复包含#ifndef COMDEF_H#define COMDEF_H//头文件内容#endif2,重新定义一些类型,防止由于各种平台和编译器的不同,而产生的类型字节数差异,方便移植。typedef unsigned char boolean; /* Boolean value type. */typedef unsigned long int uint32; /* Unsigned 阅读全文
posted @ 2011-07-19 15:50 wangkangluo1 阅读(1160) 评论(0) 推荐(0)
摘要:原文地址:http://hi.baidu.com/bellgrade/blog/item/229f792d39e0a5e68a1399f3.html函数名与函数指针一 通常的函数调用 一个通常的函数调用的例子://自行包含头文件void MyFun(int x); //此处的申明也可写成:void MyFun( int );int main(int argc, char* argv[]){MyFun(10);//这里是调用MyFun(10);函数 return 0;}void MyFun(int x) //这里定义一个MyFun函数{ printf(“%d\n”,x);} 这个MyFun函数是 阅读全文
posted @ 2011-07-19 15:47 wangkangluo1 阅读(12920) 评论(7) 推荐(5)
摘要:编译器:gcc内存泄露:valgrind参考地址:http://dsec.pku.edu.cn/~yuhj/wiki/gdb.htmlhttp://wenku.baidu.com/view/c27253c65fbfc77da269b19b.html代码跟踪:strace日志:log4c代码性能:gprofgcov完 阅读全文
posted @ 2011-07-13 10:22 wangkangluo1 阅读(379) 评论(0) 推荐(0)
摘要:c 读文件#include<stdio.h>#include<stdlib.h>#include<string.h>#defineszBUF30000intmain(intargc,char*argv[]){charfilename[szBUF]={0};charbuf[szBUF]={0};chara[szBUF];char*need_find_start="<RoomType>";intlens_start=strlen(need_find_start);char*need_find_end="</Room 阅读全文
posted @ 2011-07-12 18:14 wangkangluo1 阅读(353) 评论(0) 推荐(0)
摘要:#include "stdio.h"struct DEMO{ int x,y; int (*func)(int,int); //函数指针};int add2(int x,int y){ return x+y;}void main(){ struct DEMO demo; demo.func=&add2; //结构体函数指针赋值 printf("func(3,4)=%d\n",demo.func(3,4));}完 阅读全文
posted @ 2011-07-11 18:14 wangkangluo1 阅读(296) 评论(0) 推荐(0)
摘要:C语言中define的用法(2009-08-17 19:21:11)转载标签: 杂谈 define是C语言中的预处理命令,它用于宏定义,可以提高源代码的可读性,为编程提供方便。预处理命令以“#”号开头,如包含命令#include,宏定义命令#define等。一般都放在源文件的前面,它们称为预处理部分。所谓预处理是指在进行编译之前所作的工作。预处理是C语言的一个重要功能,它由预处理程序负责完成。当对一个源文件进行编译时,系统将自动引用预处理程序对源程序中的预处理部分作处理,处理完毕自动进入对源程序的编译。宏的定义 在C或C++语言源程序中允许用一个标识符来表示一个字符串,称为“宏”。被定义为“宏 阅读全文
posted @ 2011-07-11 17:25 wangkangluo1 阅读(4397) 评论(1) 推荐(0)
摘要:#define LOG(fmt,args...) log_message(__FILE__, __LINE__, __FUNCTION__,fmt ,## args);完 阅读全文
posted @ 2011-07-11 17:00 wangkangluo1 阅读(448) 评论(0) 推荐(0)
摘要:#include <stdio.h> #include <stdarg.h> ////处理可变参数列表,需要包含这个头文件int max(int num, int b, ...) ///num表示参数的个数{ va_list ap; int m,i,temp; va_start(ap,b); ////处理可变参数列表,初始化 m=b; for(i=1;i<num;i++) { temp=va_arg(ap,int); ////处理可变参数列表,每次取一个参数 if(m<temp)m=temp; } va_end(ap); ////处理可变参数列表,结束 re 阅读全文
posted @ 2011-07-11 16:56 wangkangluo1 阅读(308) 评论(0) 推荐(0)
摘要:原文地址:http://www.linuxany.com/archives/791.html01、版权和版本02、缩进、空格、换行、空行、对齐03、程序注释04、函数的[in][out]参数05、对系统调用的返回进行判断06、if 语句对出错的处理07、头文件中的#ifndef08、在堆上分配内存09、变量的初始化10、h和c文件的使用11、出错信息的处理12、常用函数和循环语句中的被计算量13、函数名和变量名的命名14、函数的传值和传指针15、修改别人程序的修养16、把相同或近乎相同的代码形成函数和宏17、表达式中的括号18、函数参数中的const19、函数的参数个数20、函数的返回类型,不 阅读全文
posted @ 2011-07-11 13:16 wangkangluo1 阅读(342) 评论(0) 推荐(0)
摘要:原文地址:sprintf()的一些高级用法在将各种类型的数据构造成字符串时,sprintf 的强大功能很少会让你失望。由于sprintf 跟printf 在用法上几乎一样,只是打印的目的地不同而已,前者打印到字符串中,后者则直 接在命令行上输出。这也导致sprintf 比printf 有用得多。sprintf 是个变参函数,定义如下:intsprintf(char*buffer,constchar*format[,argument]...);除了前两个参数类型固定外,后面可以接任意多个参数。而它的精华,显然就在第二个参数:格式化字符串上。printf 和sprintf 都使用格式化字符串来指定 阅读全文
posted @ 2011-07-11 13:05 wangkangluo1 阅读(620) 评论(0) 推荐(0)
摘要:原文地址:http://www.linuxany.com/archives/914.html//1.字符串大小写转换函数char * ConversionString(char* _pDest, const char * _pSrc, int _nFlag);//2.将字符串转换为整数int CharToInt(const char* _pStr);//3.将字符串转换成数字double CharToDouble(const char* str);//4.将整型数字转换为字符串,(正负数都可以)char * IntToChar(char* pDestStr, int nSrcNum);//5. 阅读全文
posted @ 2011-07-11 13:01 wangkangluo1 阅读(1136) 评论(0) 推荐(0)