2013年4月16日

摘要: 1、先来看一个例子:#include "stdio.h" int main(int argc, char* argv[]) { int i = 0; printf("%d, %d\n", ++i , ++i); return 0; } //vc编译输出 2,1//xcode使用的编译器输出 1,2这还是跟编译器的默认调用约定有关,vc编译器的默认调用约定的函数参数压栈顺序是从右向左的,所以先计算最右边的++i;xcode使用的编译器则相反。2、继续例子#include "stdio.h" int f(){ printf("f 阅读全文
posted @ 2013-04-16 22:52 江在路上 阅读(210) 评论(0) 推荐(0) 编辑
 
摘要: 一、函数原型的格式如下:[作用域][函数的链接规范]返回值类型[函数的调用规范]函数名(类型1[形参名],类型2[形参名],...)函数的参数压栈顺序与其中的 函数的调用规范 有关系,函数的调用规范就是描述参数是怎么传递的和由谁平衡堆栈的,当然还有返回值。编译出来的c/c++程式的参数压栈顺序只和编译器相关!二、函数调用约定的几种类型__stdcall,__cdecl,__fastcall,__thiscall,__nakedcall,__pascal三、函数调用约定的主要约束事件(1)、参数传递顺序1.从右到左依次入栈:__stdcall,__cdecl,__thiscall2.从左到右依次 阅读全文
posted @ 2013-04-16 21:54 江在路上 阅读(2605) 评论(0) 推荐(0) 编辑
 
摘要: 一、什么是可变参数 我们在C语言编程中有时会遇到一些参数个数可变的函数,例如printf()函数,其函数原型为:int printf( const char* format, ...);它除了有一个参数format固定以外,后面跟的参数的个数和类型是可变的(用三个点“…”做参数占位符),实际调用时可以有以下的形式: printf("%d",i);printf("%s",s);printf("the number is %d ,string is:%s", i, s); 以上这些东西已为大家所熟悉。但是究竟如何写可变参数的C函数呢?二、 阅读全文
posted @ 2013-04-16 20:33 江在路上 阅读(165) 评论(0) 推荐(0) 编辑
 
摘要: 1、定义1) Little-Endian就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。2) Big-Endian就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。例如:(1)16bit宽的数0x1234在Little-endian模式CPU内存中的存放方式(假设从地址0x4000开始存放)为:内存地址0x40000x4001存放内容0x340x12而在Big-endian模式CPU内存中的存放方式则为:内存地址0x40000x4001存放内容0x120x34(2)32bit宽的数0x12345678在Little-endian模式CPU内存中的存放方式(假设从地 阅读全文
posted @ 2013-04-16 14:38 江在路上 阅读(206) 评论(0) 推荐(0) 编辑