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) |