您的位置:首页 > 编程语言 > C语言/C++

Way on c & c++ 小记 [四]

2010-02-04 12:07 281 查看
关于自增运算符的进一步研究。

代码:
#include<stdio.h>
 
int main(int argc,char*argv[]){
      int a,b;
      a = b = 0;
      b = ++a;
      b = a++;
      b++;
      a = a++;
      return 0;
}


反汇编后:
b = ++a;
00000039 inc        dword ptr [ebp-0Ch]
0000003c mov        eax,dword ptr [ebp-0Ch]
0000003f mov        dword ptr [ebp-10h],eax
      b = a++;
00000042 mov        eax,dword ptr [ebp-0Ch]
00000045 mov        dword ptr [ebp-10h],eax
00000048 inc        dword ptr [ebp-0Ch]
      b++;
0000004b inc        dword ptr [ebp-10h]
      a = a++;
0000004e nop             
0000004f inc        dword ptr [ebp-0Ch]


2010-1-30

----------------------------------------cuttingline----------------------------------------

C中预处理与typedef概览。
【目录】
1.宏定义
2.文件包含
3.条件编译
4. typedef

一、宏定义
预处理命令,包括文件包含和条件编译,都是在预编译时进行处理的;因为编译器无法识别预处理命令,所以在编译前,预处理命令已经处理完毕。预处理命令是ANSI C统一规定的,但是并不是C语言本身的组成,所以纯粹的C编译器是无法识别它们的。
个人总结宏定义有3个用途:
I 简单的宏定义:#define A B
这个比较简单,就是纯粹的完全的替换
II 带参数的宏定义:#define A(a,b) a+b
这点有点类似函数处理,不过函数是在运行时进行调用,而宏定义在编译时便进行替换。前者时间花费在运行上的现场保护等,后者花费在预处理命令上的处理。
例子:
#include <stdio.h>

#define Add(a,b) a+b

int main(){
int c;
c = Add(2,3);
printf(“%d/n”,c);
return 0;
}
这一段代码输出5并进行换行。
III 得到多个结果的宏
有时候调用函数想返回多个值得使用数组或者指针,使用宏有时候可以简单地“返回”多个值。
例子:
#include <stdio.h>

#define LenAndArea(l,s,a,b)l=(a+b)*2;s=a*b;

int main(){
int len,area;
LenAndArea(len,area,2,3);
printf(“%d/n%d/n”,len,area);
return 0;
}
这一段输出10换行6换行

二、文件包含
写C语言第一句一般都是#include<stdio.h>,所以一般久而久之就以为这是C语言的一部分了;然而很惊人的,严格来说这不是C语言本身的组成部分。
文件包含有两种形式,一种是#include“stdio.h”,表示要包含的文件从当前目录下搜索,而#include
<stdio.h>则表示从存放C库函数头文件的目录搜索,为标准方式。
文件包含在编译预处理时形成一个新的源文件,即将目标文件全部包含进来再进行编译,形成.obj文件,再进行连接。

三、条件编译
条件编译给我的第一印象是类似于ThinkPHP的配置文件中设置了‘DEBUG_MODE’
=> TRUE,为什么呢?因为学习条件编译的时候看到的就是用来控制进行跟踪的输出。
例子:
#include <stdio.h>

#define DEBUG

int main(){
#ifdef DEBUG
printf(“开启了跟踪/n”);
#endif
return 0;
}
当源文件中有多个跟踪输出的时候这样使用方便许多。此外,在避免重复包含头文件时也如此处理。
条件编译格式:
#ifdef A
codehere…
#else
code
#endif
其中#else部分可以省略,只要前文中有#defineA语句,甚至不需要对A进行具体定义标识,便会执行相应代码部分。
类似的有#ifndef。
条件编译与if语句不同,条件编译是在编译阶段选择是否进行编译,而if语句是程序运行阶段的控制语句。
最后还有一种条件编译,它根据表达式的值是否为真判断是否进行编译:
#if A
code1
#else
code2
#endif
如果A为真则编译code1,否则编译code2。

四、Typedef
typedef不是预处理命令,它是在编译时进行处理的。
使用typedef可以利于程序的通用性和可移植性。有的机器上int类型占用2个字节,而有的机器上int类型占用4个字节,此时的int就相当于long类型的数值范围。为了便于移植,可以使用:
typedef int INT
typedef long INT
此外,使用typedef定义数组如下:
#include <stdio.h>

typedef int INTARR[10];

int main(){
INTARRa={1,2};
printf(“%d/n%d/n”,a[0],a[1]);
return0;
}
2010-2-4

----------------------------------------cuttingline----------------------------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: