Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4012201
  • 博文数量: 536
  • 博客积分: 10470
  • 博客等级: 上将
  • 技术积分: 4825
  • 用 户 组: 普通用户
  • 注册时间: 2006-05-26 14:08
文章分类

全部博文(536)

文章存档

2024年(3)

2021年(1)

2019年(1)

2017年(1)

2016年(2)

2013年(2)

2012年(10)

2011年(43)

2010年(10)

2009年(17)

2008年(121)

2007年(252)

2006年(73)

分类:

2007-10-10 09:24:35

1>. 不同数据类型的赋值问题。
eg1:
   int    a;
   unsigned char b;

   b = a;

以上代码在Linux/Unix下会自动转换, 但Windows下会提示问题的(编译的时候把警告项设置了)。

eg2:
unsigned char     *po;
unsigned long     num;

 *po++ = num;

Windows下编译的提示:
warning C4244: '=' : conversion from 'unsigned long ' to 'unsigned char ', possible loss of data

建议手工设置好类型强制转换:
eg:
    *po++ = (unsigned char)num;

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

2>. 不同数据类型的比较问题。
eg1:
    int     i;
    unsigned int t;

    for (i = 0; i < t; i++)
    { ... }

在Windows下编译会提示如下的问题:
warning C4018: '<' : signed/unsigned mismatch

在Linux/Unix下编译是没有任何问题的。

建议写成:
eg:
    for (i = 0; i < (int)t; i++)
    { ... }

仔细想想(i < (int)t)这样写是有问题的,下面是个小的实例:
#include

int main(int argc, char **argv)
{
  int   i;
  unsigned int t;

  t = 0xffffffff;
  for (i = 0; i < t; i++);

  printf("i = %d, t = %08x \n", i, t);

  return (0);
}
你可以在不同的平台下编译测试一下。加(int)和不加的区别是什么。

说实话这样写代码不是太好,如果你非要写成(int < unsinged int)时,那你一定确定你的循环中的unsigned int强制转换为int时不会出错了(当你的unsigned int小于0xefffffff时就不会出问题了)。

=================================
3>. 注意文件路径写法区别。

#ifdef _WIN32
#  include "abc\\testheader.h"
#else
#  include "abc/testheader.h"
#endif

应该还有很多注意的地方,目前就小节到这吧,以后慢慢学习。
阅读(2279) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~