摘要: e.g.struct test{ char x1;//1+1 short x2;//2 float x3;//4 char x4;//1+3}共12字节改变缺省的対界方式:使用伪指令#pragma pack(n) c编译器将按照n字节对齐方式使用伪指令#pragma pack();//取消自定义对齐方式应用实例:在网络协议编程中,出出力不同协议的报文。一种方法是通过指针编译来得到各种信息,这样做编程复杂,而且一旦协议发生变化,程序修改起来也麻烦。另一种方法:定义自己的协议结构,通过访问结构的成员来获取各种信息。#pragma pack(1) // 按照1字节方式进行对齐struct TCPHE 阅读全文
posted @ 2013-08-22 13:32 beijixing135132 阅读(133) 评论(0) 推荐(0) 编辑
摘要: 1、一般在每个头文件中用#ifdef #define #endif 来让头文件只编译一次 这个的作用等同于#pragma once,但是前者用的比较多2、一个原则:尽量在cpp文件中包含需要的头文件,而非在头文件中3、第二个原则:如果可以不包含头文件,就不要包含了。可以用前置声明的就尽量用前置声明class A;3、什么时候用前置声明可以解决问题,什么时候就必须要用包含头文件? 在这个文件中如果是仅仅需要的另一个头文件中的类的指针,并没有用到这个类的具体对象,也没有访问到具体成员,可以用前置声明即可。也就是前置声明只能用于指针 阅读全文
posted @ 2013-08-22 13:22 beijixing135132 阅读(176) 评论(0) 推荐(0) 编辑
摘要: linux系统中:/ect/profile:是所有用户的环境变量信息,比如在其中加入export LANG=ZH_CN,这样登录时就会显示中文登录提示/etc/environment:是系统的环境变量信息,这里的信息与登录用户无关,如果在这里加上export LANG=ZH_CN的话,在/etc/profile没有加,这样登录时并不会显示中文,因为登录读取的是/etc/profile,不是这里linux中配置环境变量的三种方法:1、修改/etc/profile文件:是修改了所有用户的环境变量 一般不要冲掉变量的原来内容PATH=$JAVA_HOME/bin:$PATH2、修改.bashrc文件 阅读全文
posted @ 2013-08-16 10:43 beijixing135132 阅读(92) 评论(0) 推荐(0) 编辑
摘要: 一个程序可以对应多个进程,比如可以同时打开多个记事本程序的进程。1、进程由两部分组成:内核对象和地址空间 内核对象:系统中的一块内存,该内存块是一种数据结构,维护进程的各种信息 地址空间:可执行的模块和代码数据进程不执行任何东西,只是线程的容器,由线程完成工作,一个进程必须拥有一个线程mian或winmain可以看做主线程的入口点2、线程由两部分组成:内核对象和线程栈 内核对象:维护线程信息,是管理各个线程的线程栈:这是一个线程对象的参数和变量存放地,线程的环境跟其进程一样,线程可以访问同属于一个进程的其他线程的堆栈信息3、win32API关于多线程编程 线程同步:一个线程执行完或者到了某个状 阅读全文
posted @ 2013-08-12 22:15 beijixing135132 阅读(142) 评论(0) 推荐(0) 编辑
摘要: 断言:使用断言调试某种情况,可以在某些情况下打印或者特殊处理,相当于高级的异常处理,或者判断是否具有某项功能简单的使用assert(express)既可以更多时候是自己写一些灵活的断言:#undef _EXAM_ASSERT_TEST_ //关闭断言#define _EXAM_ASSERT_TEST_ //开启断言#ifdef _EXAM_ASSERT_TEST_ //若使用断言测试void exam_assert(char * file_name,unsigned int line_no){printf("\n[EXAM]Assert faillded:%s,line %u\n&q 阅读全文
posted @ 2013-08-12 21:43 beijixing135132 阅读(193) 评论(0) 推荐(0) 编辑
摘要: 1、win32中关于char* 的类型win32中:const char*====LPCTSTR (Long Ptr const tchar )就是不能修改执行的值的内容char *=====LPSTR在win32中可以使用它们的等价代替者,这里的每个字符是占8位的LPWSTR和LPCWSTR就是相对于上边两个指针来说的,但是每个字符占据16位,是宽字符,即w_charCString中的字符就是这种宽字符#ifdef _UNICODE typedef const wchar_t * LPCTSTR#else typedef const char * LPCTSTR#endif2、常用类型转换 阅读全文
posted @ 2013-08-09 20:42 beijixing135132 阅读(818) 评论(0) 推荐(0) 编辑
摘要: 1、系统中有一些关于可变形参的方法,#include va_list实际上只是一个参数指针, va_start根据你提供的最后一个固定参数来获取第一个可变参数的地址, va_arg将指针指向下一个可变参数然后返回当前值, va_end只是简单的将指针清0.string SumStrNew(int nCount, ...) { string str; va_list vl = 0; //参数指针va_start(vl, nCount); //获得第一个参数开始for(int i=0; i tm_year + 1900, now -> tm_mon + 1, now -> tm_mda 阅读全文
posted @ 2013-08-06 21:49 beijixing135132 阅读(305) 评论(0) 推荐(0) 编辑
摘要: 宏定义注意:1、#define中的#v和##:#v表示将参数直接转化为字符串,##将两个变量连接成一个字符串 #define paster( n ) printf( "token " #n" = %d\n ", token##n ) 其中token##n被当做一个变量(token6)如果n=62、如果#define 要执行的操作比较多,为了不因为多;而出错,一般用do{}while(0)3、可变参数的#define... 阅读全文
posted @ 2013-08-06 21:18 beijixing135132 阅读(180) 评论(0) 推荐(0) 编辑
摘要: char*与CString的互相转化:1、char*转化为CString:利用Format CString str;str.Format("%s",char*a);2、CString转化为char* 一般可以使用CString的GetBuffer(长度)也可以使用间接的方式:::WideCharToMultiByte(CP_ACP, NULL, str, wcslen(str), NULL, 0, NULL, NULL)先将CString 转化为BYTE*,再直接转换为char* 就可以了 阅读全文
posted @ 2013-08-06 17:49 beijixing135132 阅读(265) 评论(0) 推荐(0) 编辑
摘要: extern 阅读全文
posted @ 2013-08-06 15:45 beijixing135132 阅读(157) 评论(0) 推荐(0) 编辑