
C语言
freeandperson
这个作者很懒,什么都没留下…
展开
-
typedef 的用法
typedef 的用法 *****以下是参考部分***** 此部分参考自:http://blog.sina.com.cn/u/572f7666010008dm 用途一: 定义一种类型的别名,而不只是简单的宏替换。可以用作同时声明指针型的多个对象。比如: char* pa, pb; // 这多数不符合我们的意图,它只声...原创 2009-04-01 12:31:02 · 91 阅读 · 0 评论 -
VC++ 基础知识
Part1: 1. 如何解决Visual C++ 6.0不正确连接的问题 情景:明明改动了一个文件,却要把整个项目全部重新编译链接一次。刚刚链接好,一运行,又提示重新编译链接一次。 这是因为出现了未来文件(修改时间和创建时间比系统时间晚)的缘故。可以这样处理:找到工程文件夹下的debug目录,将创建和修改时间都比系统时间的文件全部删除,然后再从新“Rebuild All”一次。 2. 引起LNK2...原创 2009-06-22 11:40:54 · 450 阅读 · 0 评论 -
sizeof()用法汇总
sizeof()功能:计算数据空间的字节数1.与strlen()比较 strlen()计算字符数组的字符数,以"\0"为结束判断,不计算为'\0'的数组元素。 而sizeof计算数据(包括数组、变量、类型、结构体等)所占内存空间,用字节数表示。2.指针与静态数组的sizeof操作 指针均可看为变量类型的一种。所有指针变量的sizeof 操作结果均为4。注意:int *...原创 2009-06-18 10:45:47 · 142 阅读 · 0 评论 -
交叉编译器
在一种计算机环境中运行的编译程序,能编译出在另外一种环境下运行的代码,我们就称这种编译器支持交叉编译。这个编译过程就叫交叉编译。简单地说,就是在一个平台上生成另一个平台上的可执行代码。这里需要注意的是所谓平台,实际上包含两个概念:体系结构(Architecture)、操作系统(Operating System)。同一个体系结构可以运行不同的操作系统;同样,同一个操作系统也可以在不同的体系结构上运行...2010-03-21 13:22:48 · 137 阅读 · 0 评论 -
usf2 转成 utf8的转换函数
在网上找了个ucs2转utf8的C语言实现, 看他写的代码超级麻烦。虽然同样是实现了转换。我这里提供一个比较经典的实现转换的函数, 用到的技术主要是位操作符号。该函数来自于公司内部人员的一个模块。 写的非常棒, 就拿出来共享一下了。 在开始写之前还是附带上一些utf8与ucs2的资料, 方便理解该转换的宏模块 以下是从一些网站截取的一些基础资料 ==========...2009-05-31 22:19:59 · 202 阅读 · 0 评论 -
UNICODE 编程入门
不错的一遍技术文档: 来自于:http://www.vckbase.com/document/viewdoc/?id=642 UNICODE 编程入门作者:NorthTibet简介 如果你编写的程序是针对非英语国家的用户,如中国、日本、东欧和中东地区,那么你一定要熟悉 UNICODE 字符集。尤其是用 Visual C++/MFC 编写针对上述国家和地区的用户的程序时,如...原创 2009-05-28 23:48:27 · 130 阅读 · 0 评论 -
#pragma
#pragma 预处理指令详解 在所有的预处理指令中,#Pragma 指令可能是最复杂的了,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作。#pragma指令对每个编译器给出了一个方法,在保持与C和C++语言完全兼容的情况下,给出主机或操作系统专有的特征。依据定义,编译指示是机器或操作系统专有的,且对于每个编译器都是不同的。 其格式一般为: #Pragma Para ...2009-05-28 00:43:19 · 98 阅读 · 0 评论 -
_MSC_VER
_MSC_VER 是什么意思?这是微软的预编译控制。 在_MSC_VER较小时,它对一些东西的支持与新版不同_MSC_VER分解如下:MS:Microsoft(微软)的简写C:MSC就是Microsoft出的C编译器。VER:Version(版本)的简写。全部加在一起就是:Microsoft的C编译器的版本很多头文件中有#if _MSC_VER > 100...原创 2009-05-28 00:33:44 · 171 阅读 · 0 评论 -
关于#ifdef __cplusplus extern
来自与http://blog.youkuaiyun.com/nih1986517/archive/2008/10/12/3065386.aspx 时常在cpp的代码之中看到这样的代码: #ifdef __cplusplus extern "C" { #endif //一段代码 #ifdef __cplusplus } #endif 这样的代码到底是什么意思呢?首先...原创 2009-05-27 14:27:41 · 86 阅读 · 0 评论 -
C++调用约定和名字约定
__cdecl __fastcall与 __stdcall,三者都是调用约定(Calling convention),它决定以下内容: 1)函数参数的压栈顺序,2)由调用者还是被调用者把参数弹出栈,3)以及产生函数修饰名的方法。 1、__stdcall调用约定:函数的参数自右向左通过栈传递,被调用的函数在返回前清理传送参数的内存栈, 2、_cdecl是C和C+...2010-03-27 07:38:57 · 91 阅读 · 0 评论 -
VMware上跑Hello,World操作系统
这真是令人兴奋的一件事情。 哈哈, 在去年的时候就打算开始研究linux内核。苦于公司的事情繁忙。 今天终于入门了。 在这里偶把偶的经历分享一下吧! 1温故而知新先温习一下汇编语言,当然这个是一个苦活!我是温习了一下《IBM-PC汇编语言程序设计》 2了解操作系统基础概念我推荐一本电子书,《自己动手写操作系统》。这本书写的真的不错。如果谁需要,可以发...2010-04-01 00:50:16 · 749 阅读 · 1 评论 -
如何区分“总线地址”与“物理地址”
今天在看《Linux设备驱动程序》里面的第十五章“内存映射和DMA”里面的一大堆地址类型弄得我云里去雾里来的。 如:用户虚拟地址物理地址总线地址内核逻辑地址内核虚拟地址linux这个操作系统真是事情多啊,地址都搞这么多名堂的。我以前对地址的理解就是:逻辑地址:相对于进程4G空间来说的,为了隔离物理地址与程序直接交互,减轻程序员的负担。通过段映射,页映射可...原创 2011-03-11 15:41:50 · 1329 阅读 · 0 评论 -
再次理解C语言的变参
实在是令我很郁闷的事啊。去年用了两天的时间恶补了一下变参,今天看到变参。发现头脑一篇空白,啥都不知道了。 古人有云:温故而知新。今日我就在看一遍,做个笔记了。 在C语言中,函数参数的传递方式有值传和址传.值传是把实参的一个专用的、临时的复制值给被调函数中相应的形参被调用函数使用、修改这个传来的复制值,不会影响实参的值.址传则是把变量...原创 2011-03-09 20:01:00 · 232 阅读 · 0 评论 -
再次理解offsetof的实现原理
offsetof的原型为:size_t offsetof(type, member); DESCRIPTION The macro offsetof() returns the offset of the field member from the start of the structure type. This macro ...原创 2011-03-09 14:30:02 · 607 阅读 · 0 评论 -
Linux编程 sockaddr_in sockaddr in_addr详解。
#include<stdio.h>#include <stdlib.h>#include <errno.h>#include <string.h>#include <netdb.h>#include <sys/types.h>#include <netinet/in.h>#incl原创 2010-06-21 22:31:28 · 278 阅读 · 0 评论 -
VMware上安装Fedora 12的流程
最近公司一直很忙,所以都好久没有开始写Blog了。今天看到我的Blog访问量居然有上万。还真的着实大吃一惊,这样更加激起了我写Blog的激情了。o(∩_∩)o...! 我会努力, 为大家奉上写好的文章!同时让我们一起进步吧! OK,为什么我会选择这个话题呢? 主要是我今年的目标是写一个自己的操作系统。而这方面linux是最好的材料,但是偶以前的开发都是在window os上...原创 2010-02-22 00:25:07 · 218 阅读 · 0 评论 -
__int64 类型(VC中)与long long 型(gcc中,C99标准)(转)
int64 是有符号 64 位整数数据类型,也就是 C# 中的 long 和 SQL Server 中的 bigint,范围为 -2^63 (-9,223,372,036,854,775,808) 到 2^63-1 (9,223,372,036,854,775,807),存储空间占 8 字节。用于整数值可能超过 int 数据类型支持范围的情况。 c#中:Int64 值类型表示值介于 -9,...2010-04-01 14:13:41 · 176 阅读 · 0 评论 -
换行符‘\n’和回车符‘\r’
这是偶第二次自己写对外部的技术文档: 这次公司要开发一个有关从外部读取权限信息。牵涉到了文件的解析。 在文件的解析中,最麻烦的可能就数对一些控制符号的理解了。 而首当其冲的就是换行符号'\n'与回车符号"\r". google找到了这么一段信息:换行符就是另起一行,回车符就是回到一行的开头,所以我们平时编写文件的回车符应该确切来说叫做回车换行符 '\n...2009-07-18 21:38:41 · 190 阅读 · 0 评论 -
pragma comment的使用
该宏放置一个注释到对象文件或者可执行文件。#pragma comment( comment-type [,"commentstring"] )comment-type是一个预定义的标识符,指定注释的类型,应该是compiler,exestr,lib,linker之一。commentstring是一个提供为comment-type提供附加信息的字符串,Remarks:1、co...原创 2009-07-01 12:09:15 · 86 阅读 · 0 评论 -
C对文件系统进行操作的几个函数
最近手头有个项目,是porting J2ME中的PIM可选包。在该可选包中提供了一个文件系统。通过该功能包, 应用开发者可能很方便的控制手持设备的文件。如创建文件,删除文件等等。 这块比较欠缺, SO 本人就去网上找了一些不常见的api, 对他们进行一些分析。时间有限,只能粗线的写一些。 method1:truncate改变文件大小相关函数:open, ftr...2009-05-25 15:01:25 · 137 阅读 · 0 评论 -
windows API一日一学---InvalidateRect函数
InvalidateRect函数该函数添加一个区域到指定窗口的更新区域。更新区域代表窗口客户端的一部分,这部分必须进行重新绘制。BOOL InvalidateRect( HWND hWnd, const RECT *lpRect, BOOL bErase);参数:hWnd指向需要重新绘制的窗口句柄。如果该参数为空,系统将更新和重新绘制所有的窗口,然后在该函数返回...原创 2009-05-21 01:38:40 · 318 阅读 · 0 评论 -
浅谈输入法编程
首先我们需要明白输入法是什么东西。目前常用的输入法基本上有两种类型:外挂式(如早期的万能五笔)及输入法接口式(Input Method Editor-IME)。外挂式比较简单,就是一个exe文件,通过模拟一些Windows输入消息来给当前处于活动状态的编辑窗口输入文字,一个显著的优点是输入法只要启动一次,就可以在所有进程中使用;但缺点不不容忽视,首先实现起来也不容易,一个更大的不足是兼容性不够好...原创 2009-05-14 20:34:08 · 377 阅读 · 0 评论 -
#define用法 (转帖改编)
CCmdTarget实现com接口的时候,在afxdisp.h头文件中一些宏的定义#define BEGIN_INTERFACE_PART(localClass, baseClass) \class X##localClass : public baseClass \\是什么作用:续行符:表示在一行中。因为宏只能在一行中定义本来这个宏定义很容易理解的,但是这里多出个X##,我真没见过这种用法,不晓...原创 2009-05-04 09:36:51 · 104 阅读 · 0 评论 -
C语言的经典著作
最近刚刚开始学习C我以前主要的工作是做Java的开发。由于最近在做KVM的开发,需要写native方法。不得不学习C,在这个过程中我发现了一些经典的著作。非常值得收藏!目前拥有的书籍有《C与指针》,《The C Programming Language》(C程序设计语言) 打算收藏的《C专家编程》,《C陷阱与缺陷》...2009-04-23 11:02:31 · 179 阅读 · 0 评论 -
SDL入门
SDL是什么 SDL是Simple DirectMedia Layer(简易直控媒体层)的缩写。它是一个跨平台的多媒体库,以用于直接控制底层的多媒体硬件的接口。这些多媒体功能包括了音频、键盘和鼠标(事件)、游戏摇杆等。当然,最为重要的是提供了2D图形帧缓冲(framebuffer)的接口,以及为OpenGL与各种操作系统之间提供了统一的标准接口以实现3D图形。从这些属性我们可以看...2009-04-20 09:50:06 · 436 阅读 · 0 评论 -
CreateFileMapping和MapViewOfFile函数用法
在开发软件过程里,也经常碰到进程间共享数据的需求。比如A进程创建计算数据,B进程进行显示数据的图形。这样的开发方式可以把一个大程序分开成独立的小程序,提高软件的成功率,也可以更加适合团队一起开发,加快软件的开发速度。下面就来使用文件映射的方式进行共享数据。先要使用函数CreateFileMapping来创建一个想共享的文件数据句柄,然后使用MapViewOfFile来获取共享的内存地址,然后使用O...原创 2009-10-01 15:51:36 · 257 阅读 · 0 评论 -
LPSTR、LPCSTR、LPTSTR和LPCTSTR的意义及区别
1、ANSI(即MBCS):为多字节字符集,它是不定长表示世界文字的编码方式。ANSI表示英文字母时就和ASCII一样,但表示其他文字时就需要用多字节。2、Unicode:用两个字节表示一个字符的编码方式。比如字符'A'在ASCII下面用一个字节表示,而在Unicode下面用两个字节表示,其中高字节用“0”填充;函数'程'在ASCII下面用两个字节表示,而在Unicode下面也是用...原创 2009-10-01 15:33:32 · 708 阅读 · 0 评论 -
C语言宏定义技巧
C语言宏定义技巧(常用宏定义) 写好C语言,漂亮的宏定义很重要,使用宏定义可以防止出错,提高可移植性,可读性,方便性 等等。下面列举一些***软件中常用得宏定义。。。。。。 1,防止一个头文件被重复包含 #ifndef COMDEF_H #define COMDEF_H //头文件内容 #endif 2,重新定义一些类型,防止由...原创 2009-04-07 00:09:22 · 132 阅读 · 0 评论 -
C语言的宏定义
宏定义符号常量的定义就是“宏”定义的特例。所谓“宏’就是在程序的开始将一个“标识符”定义成“一串符号”,称为“宏定义”,这个“标识符”称为‘宏名”;在源程序中可以出现这个宏,称为“宏引用”或“宏调用”;在源程序编译前,将程序清单中每个“宏名”都替换成对应的“一串符号”,称为“宏替换”,也称为“宏扩展”( 为了区别于一般的变量名、数组名、指针变量名,宏名通常都用大写字母组成。宏定义是以“# ...原创 2009-04-07 00:05:53 · 317 阅读 · 0 评论 -
TEXTMETRIC 结构详解
函数GetTextMetrics可以获取一个字体文本度量并将它放入一个类型为TEXTMETRIC的数据结构中,该结构如下所示:typedef struct tagTEXTMETRIC { // tm LONG tmHeight; //字符高度 LONG tmAscent; //字符上部高度(基线以上) LO...原创 2009-05-16 14:29:25 · 130 阅读 · 0 评论 -
位图信息头BITMAPINFOHEADER
文章来自于:http://hi.baidu.com/shangxing214/blog/item/4b1fec22d2eacd4cac34de6d.html 正文: -------------------------------------------------------------------------------------------------------------...原创 2009-05-17 00:46:12 · 238 阅读 · 0 评论 -
VC++中进程与多进程管理地办法
文章来自于:http://hi.baidu.com/ranzoo/blog/item/663f1d3f25c72bed55e7236d.html摘要: 本文主要介绍了多任务管理中的多进程管理技术,对进程的互斥运行、子进程的创建与结束等作了较详细的阐述。 关键词: VC++6.0;进程;环境变量;子进程 进程 进程是当前操作系统下一个被加载到内存的、正在运行的应用程序的实例。每一...原创 2009-05-20 23:42:11 · 94 阅读 · 0 评论 -
WIN32下线程和窗口的数据绑定
这是一遍不错的文章, 在转帖前, 赞他一下。 文章来自于:http://blog.youkuaiyun.com/zhoujianhei/archive/2007/11/19/1891891.aspx WIN32下线程和窗口的数据绑定 一. 写给自己我很懒。这是我写的第一篇涉及到编程的文章,也许就是因为太懒的缘故吧。在此之前也有写的冲动可不知为什么没...原创 2009-05-20 23:12:48 · 205 阅读 · 0 评论 -
window api 基础结构知识1 LOGFONT
在Windows内部,字体是以一个名为LOGFONT的结构来表示的。结构LOGFONT的定义如下: typedef struct tagLOGFONT { LONG lfHeight; LONG lfWidth; LONG lfEscapement; LONG lfOrientation; LONG lfWeight; BYTE lfIta...原创 2009-05-20 22:49:41 · 159 阅读 · 0 评论 -
七种qsort排序方法
七种qsort排序方法 <本文中排序都是采用的从小到大排序> 一、对int类型数组排序 int num[100]; Sample: int cmp ( const void *a , const void *b ) { return *(int *)a - *(int *)b; } qsort(num,100,sizeof(num[0]),cmp); 二、对char类型数组排序(同in...原创 2009-05-18 22:55:04 · 109 阅读 · 0 评论 -
用calloc()函数分配内存
用calloc()函数分配内存在<stdlib.h>头文件中声明的calloc()函数与malloc()函数相比有两个优点。第一,它把内存分配为给定大小的数组,第二,它初始化了所分配的内存,所有的位都是0。calloc()函数需要两个参数:数组的元素个数和数组元素占用的字节数,这两个参数的类型都是size_t。该函数也不知道数组元素的类型,所以所分配区域的地址返回为void *类型...原创 2009-05-18 22:27:31 · 295 阅读 · 0 评论 -
函数malloc()和calloc()介绍
函数malloc()和calloc()都可以用来动态分配内存空间,但两者稍有区别。 malloc()函数有一个参数,即要分配的内存空间的大小: void *malloc(size_t size); calloc()函数有两个参数,分别为元素的数目和每个元素的大小,这两个参数的乘积就是要分配的内存空间的大小。 void *calloc(size_t numElemen...原创 2009-05-18 22:21:13 · 90 阅读 · 0 评论 -
Windows API一日一练(29)SelectObject和DeleteObject函数
Windows显示设备的属性,共有下面几种:位图、画刷、字体、画笔、区域。如果要设置它们到当前设备里,就需要使用SelectObject函数,比如上面介绍的字体设置,就会用到这个函数。当你创建一个位图时,这时Windows就会在内存里分配一块内存空间,用来保存位图的数据。当你创建字体时,也会分配一块内存空间保存字体。如果程序只是分配,而不去删除,就会造成内存使用越来越多,最后导到Windows这...原创 2009-05-18 01:07:19 · 249 阅读 · 0 评论 -
Windows API一日一练(31)MoveToEx和LineTo函数
现在的世界流行图形界面,而不是文字,因此在软件开发里,肯定需要画图的,比如简单地画线,画一些比较特别的图形。比如让你画一个走动的时钟,就需要不断地画秒针、分针等等。MoveToEx是用来移动当前画笔的位置,LineTo是用来画直线的函数,其实在计算机图形里的直线显示是使用光栅图形学里的原理。 函数MoveToEx和LineTo声明如下:WINGDIAPI BOOL WINAPI MoveToEx(...原创 2009-05-18 00:47:40 · 124 阅读 · 0 评论 -
从Linux代码反思整形以及无符号整形变量的知识
从Linux代码反思整形以及无符号整形变量的知识 今日,在分析Linux调度器的过程中。在sched.c中的init_cfs_rq中,看到了如下一条奇怪的赋值语句。 static void init_cfs_rq(struct cfs_rq *cfs_rq, struct rq *rq){ cfs_rq->tasks_timeline = RB_ROOT;...原创 2013-03-06 22:18:38 · 233 阅读 · 0 评论