当前位置:主页   - 电脑 - 程序设计 - C/C++
C++的可移植性和跨平台开发[2]:语法
来源:网络   作者:   更新时间:2012-02-14
收藏此页】    【字号    】    【打印】    【关闭

  目前还有相当一部分开发人员在使用老式编译器干活,这些老式编译器可能对C++98支持不够。因此,当你的代码移植到这些老式的编译器上时,可能会碰到一些稀奇古怪的问题(包括编译出错和运行时错误)。下面这些注意事项有助于你绕过这些问题。

  强调一下,后面提到的好几个条款都是通过回避C++的新语法来保证移植性。如果你用的是新式编译器,那么你可以不理会这些条款。

  ★小心for循环变量的作用域(不支持新标准)

  在C++98标准中,for循环变量的作用域局限在循环体内。而某些老的编译器(例如Visual C++ 6)认为for循环变量的作用域在循环体外。所以如下的代码可能导致移植问题。

{
 for(int i=0; i<XX; i++)
 {
  // ...
 }
 for(int i=0; i<XXX; i++)
 {
  // ...
 }
}

  建议修改为不同的循环变量,如下所示:

{
 for(int i=0; i<XX; i++)
 {
  // ...
 }
 for(int j=0; j<XXX; j++)
 {
  // ...
 }
}

  ★不要使用全局类对象,改用单键(标准未定义)

  全局类对象的构造函数先于main()函数执行,如果某个模块中同时包含若干个全局类对象,则它们的构造函数的调用顺序是不确定的。而单键是在第一次调用时被初始化,能避免此问题。另外,单键虽然解决了构造问题,但是析构依然有隐患。详见“C++ 对象是怎么死的?进程篇”。

  ★保持inline函数尽量简单

  不要在inline函数内部使用局部静态变量,不要在inline函数使用可变参数。这些都有可能导致移植问题。

  ★不要依赖函数参数的求值顺序(标准未定义)

其它资源
来源声明

版权与免责声明
1、本站所发布的文章仅供技术交流参考,本站不主张将其做为决策的依据,浏览者可自愿选择采信与否,本站不对因采信这些信息所产生的任何问题负责。
2、本站部分文章来源于网络,其版权为原权利人所有。由于来源之故,有的文章未能获得作者姓名,署“未知”或“佚名”。对于这些文章,有知悉作者姓名的请告知本站,以便及时署名。如果作者要求删除,我们将予以删除。除此之外本站不再承担其它责任。
3、本站部分文章来源于本站原创,本站拥有所有权利。
4、如对本站发布的信息有异议,请联系我们,经本站确认后,将在三个工作日内做出修改或删除处理。
请参阅权责声明