首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

哪位高手给小弟我讲讲 typedef 在定义数据类型的时候,具体是如何做到平台无关性的?多谢了

2012-02-24 
谁给我讲讲 typedef 在定义数据类型的时候,具体是怎么做到平台无关性的?谢谢了~谢谢啦~希望详细讲讲它是怎

谁给我讲讲 typedef 在定义数据类型的时候,具体是怎么做到平台无关性的?谢谢了~
谢谢啦~
希望详细讲讲它是怎么做到的。
例如,以下:

typedef   long   double   REAL;  

在不支持   long   double   的机器上,该   typedef   看起来会是下面这样:
typedef   double   REAL;  

并且,在连   double   都不支持的机器上,该   typedef   看起来会是这样:
typedef   float   REAL;  

----------
上面具体是怎么做到的呢?原理是什么呢?
谢谢啦~




[解决办法]
定义一个头文件,保存了与及其有关的类型的typedef在移植的时候修改此文件使得其适应该系统这样其余很庞大的实现部分的代码就不必进行修改了~
[解决办法]
用宏定义隔开的。只需要更改相应的宏即可,不需要修改实现文件。

[解决办法]
促进跨平台开发
  typedef 有另外一个重要的用途,那就是定义机器无关的类型,例如,你可以定义一个叫 REAL 的浮点类型,在目标机器上它可以i获得最高的精度:

typedef long double REAL; 在不支持 long double 的机器上,该 typedef 看起来会是下面这样:

typedef double REAL; 并且,在连 double 都不支持的机器上,该 typedef 看起来会是这样: 、

typedef float REAL;   你不用对源代码做任何修改,便可以在每一种平台上编译这个使用 REAL 类型的应用程序。唯一要改的是 typedef 本身。在大多数情况下,甚至这个微小的变动完全都可以通过奇妙的条件编译来自动实现。不是吗? 标准库广泛地使用 typedef 来创建这样的平台无关类型:size_t,ptrdiff 和 fpos_t 就是其中的例子。此外,象 std::string 和 std::ofstream 这样的 typedef 还隐藏了长长的,难以理解的模板特化语法,例如:basic_string <char, char_traits <char> ,allocator <char> > 和 basic_ofstream <char, char_traits <char> > 。

[解决办法]
define 只是个简单的替换,当定义的变量为多个时,程序并没有象我们想象的那样工作。。
比如:
#include <iostream>
using namespace std;

#define pINT int *
//typedef int * INT;

int main()
{
int temp = 5;
pINT a, b;

a = &temp;
b = &temp;

cout < < *a < < *b < < endl;
return 0;
}

换成typedef那样再试试。。。
[解决办法]
星羽的意思应该是用typedef的话不用你自己再去修改定义,它会自动选择符合平台的定义

而用#define的话,还得自己一个一个把#define改成平台支持的定义
[解决办法]
typedef can not finish this definition, it relies on the Pre-compile.
Pre-compile can choose the appropriate codes, it means that some useful codes will be added to be compiled and some will not in PRE-compile period!


[解决办法]
星羽的意思应该是用typedef的话不用你自己再去修改定义,它会自动选择符合平台的定义

而用#define的话,还得自己一个一个把#define改成平台支持的定义


=============

错误。狗说的是正确的。通过预编译指令和构建脚本可以选择使用哪个定义,而 typedef 或者宏可以使代码中引用这些类型的地方不需要全部改变。因此在这个层次上讨论,typedef 和 #define REAL double 是等价的。

它们的区别在于语意和代码中的作用。
[解决办法]
该死的输入法罢工了N久了!!

事实上看看stl_port里面的stl_config.h就知道如何使用pre-compile系统完成移植了
typedef替代直接的类型定义的效果和命名常量替代直接的字面常量一样

热点排行