技术开发 频道

基本类型的长度和符号

【IT168 技术文档】 C语言中并未规定charintlong这样的基本类型的长度和符号。这给与了编译器很大的灵活性,但是也产生了很多问题。

    int是程序中最常用的类型。理论上来说,int应该被定义为CPU中运算最快的类型,比如80386系列中的32位整数。在升级程序到64位CPU环境的时候,应该可以重新编译程序来把32位运算升级到64位运算以增加性能。但是太多代码不正确地使用intlong来做指针运算,以至于会在升级时崩溃。目前很多64位编译器中的int仍然是32位,在有的编译器中甚至连long也仍旧是32位,而引入新的数据类型来代表64位变量。

    另外一个问题是基本类型的符号。在Visual C++中,基本类型是有符号的,如果在开发时使用无符号修饰符的基本类型的话,这会在移植程序到使用无符号基本类型的编译器时出现问题。举例来说,在基本类型的符号不同的情况下,下面两行代码

int b=-1;unsigned int a=b;
int b=-1;b>>5;

    的行为会有所不同。Visual C++ 2005编译器开发人员试图关闭/J开关(这个开关决定charunsigned还是signed),并且用改进的警告功能来在编译未指定符号的基本类型时给出警告信息。但是这会使得绝大多数代码工作不正常,用户的负面反馈淹没了这个动议。

    为了代码的可移植性起见,建议在使用基本类型的时候加上符号修饰符。

0
相关文章