我在编程时,比较喜欢用最原始的数据类型,如:int bool char short long float double true false,如果有需要再加上unsigned也不觉得长,并且在编辑器中这些类型是蓝色的,不喜欢使用 BOOL BYTE LONG WORD DWORD TRUE FALSE等在编辑器中显示为黑色的大写字母,可能是我长期写过C语言形成的习惯吧,转到C++后习惯难改。但是看到很多人和MFC和教科书都使用BOOL BYTE WORD DWORD等,如果仅仅是习惯不同倒无所谓,既然有这么多人使用,会不会有我还没有掌握的技巧和优点呢?特向高手请教一下。

解决方案 »

  1.   

    我是想 BOOL BYTE LONG WORD DWORD 会不会有一些没有被了解的优点?
      

  2.   

    没区别,用你习惯的最好。没法微软定义的头文件用了 BOOL BYTE LONG WORD DWORD TRUE FALSE,因而你看时也得了解它们是什么类型。同时你也可以定义其自己喜欢的名称。例如很多人喜欢 S1 char,S2 short ,S4 int ,U1 u,U2,U4 加上unsigned等。
      

  3.   

    因为bool占1个字节,而BOOL占4个字节,根据intel CPU的内存分页机制,4字节可以防止内存松散,防止产生更多的内存碎片,有利于数据的传输!摘自《Intel汇编语言程序设计 第五版》
      

  4.   

    如果在一个程序中使用bool,就不要再使用BOOL,
      

  5.   

    你要是多看开源代码就知道了,int bool char short long float double true false,BOOL BYTE LONG WORD DWORD TRUE FALSE,开源代码有时还会为这些关键字typedef,目的是为了跨编译器。
      

  6.   

    我知道int是最快的数据类型,是cpu的a寄存器的长度,所以32位机int=32,16位机int=16,但是short=16,long=32位,基本是固定不变的。
      

  7.   

    我觉得这个是为了程序的灵活性而设计的。其实你也可以自己重新typedef。比如你先 typedef   int   MYINT;
    你一直用MYINT 来定义变量。有一天你发现你的工程里用MYINT定义的变量都需要用float型才合适,这个时候你只需要将原来的typedef改为 typedef  float  MYINT 就好了。个人理解。
      

  8.   

    我觉得跟代码风格有关。
    如果是MFC的项目就用DWORD 之类
    如果没有MFC的话就用unsigned long 之类
      

  9.   

    显然不简单是习惯,BOOL BYTE LONG WORD DWORD TRUE FALSE这些更方便移植和维护
      

  10.   

    其实这些问题都不大。真正问题较多的在对string的处理上,见过太多C转C++的还在用C的函数处理string, 那代码叫一个丑陋。
    还有,就是尽量用C++的思维方式(面向对象)去考虑问题。这才是根本
      

  11.   

    还是有点差别的,涉及到 可移植性。大写的,是宏定义(可以随机器不同 定义不同的值)小写的是内置数据类型(用这个,就比较麻烦了,比如long,不同的机器,占用的字节数不一样,
    详见 C99标准,或者C++标准。)
      

  12.   

    #define _ULONGLONG_
    #if (!defined (_MAC) && (!defined(MIDL_PASS) || defined(__midl)) && (!defined(_M_IX86) || (defined(_INTEGRAL_MAX_BITS) && _INTEGRAL_MAX_BITS >= 64)))
    typedef __int64 LONGLONG;
    typedef unsigned __int64 ULONGLONG;#define MAXLONGLONG                      (0x7fffffffffffffff)
    #else#if defined(_MAC) && defined(_MAC_INT_64)
    typedef __int64 LONGLONG;
    typedef unsigned __int64 ULONGLONG;#define MAXLONGLONG                      (0x7fffffffffffffff)
    #else
    typedef double LONGLONG;
    typedef double ULONGLONG;
    #endif //_MAC and int64#endif看看这段代码楼主就会明白了,不同的系统平台这些大小的数据类型可能对应不同的基本数据类型
      

  13.   

    一个网上的Dll,示例代码给出的是windows代码。
    我想把这个Dll作为子进程使用,觉得写个一般的C++的main调用这个Dll中的函数就可以了。
    但是,我遇到的了问题:
    这个Dll中头文件中用到了BOOL BYTE LONG WORD DWORD 等类型,我就用相应的int bool char short 替代,结果不能找到其中的函数,就是说无法调用。 
      

  14.   

    这个牛逼。
    我一开始中还以为BOOL和bool不一样呢,所以虽然有VA但每次都改成bool,这回学习了,以后都用BOOL了。
      

  15.   

    不同的编译器平台可能int long这些定义的长度不一样,而用宏定义来实现,则可以避免由此产生的问题.增加程序的可移植性.这个在跨平台编程的时候有用吧.
      

  16.   

    BOOL BYTE LONG WORD DWORD更加直观一些,而且不管是别人看起来还是自己写起来都方便。
      

  17.   

    BOOL实质上是整型,API函数不使用bool是因为API的要求是任何编程语言下都能使用,
    而bool是C/C++专有的类型。其它的typedef和原始类型应该不会引起DLL链接失败问题。同意楼上诸位,typedef正是为了保证可移植性。另外,关于BOOL和bool,多啰嗦两句。
    BOOL是整型,值域也是整型的值域;而bool编译器限定了其值域只有true和false两个值。
    所以BOOL型变量之间是不可以直接用==或!=做比较的(风险很大),而bool型可以。
      

  18.   

    请问在VS2010中怎么设置成VC6的字体?
      

  19.   

    唉~LZ不知道帖子的分值是可以加的么,22L以后的诸位伤心ing……