G++不同版本的C/C++软件移植指南

本文介绍了GCC 4.4版本的C/C++软件移植中遇到的问题,包括预处理器条件执行、更严格的类型别名、头文件依赖变化、null终止函数限制以及初始化调整。并提供了相应的解决办法,如使用常量表达式、修改类型别名处理、正确包含头文件以及使用初始化成员等。
摘要由CSDN通过智能技术生成


1.

strchr    error: invalid conversion from ‘const char*’ to ‘char’ [-fpermissive]

针对GCC 4.4版本的C/C++软件移植指南 Sep 21, 2012

本文是Porting to GCC系列的第二篇。主要介绍GCC 4.4版本的特性及C/C++软件移植相关的问题。

扩展阅读

如果你希望更加深入的了解GCC相关特性、体系及编程等,可参考以下的材料:

  1. 各类官方文档
  2. The Definitive Guide to GCC(William von Hagen著):全面介绍GCC相关内容,包括auto*工具链使用及语言特性的扩展等。
  3. Unix to Linux Porting (Alfredo mendoza等著):这是*nix软件移植开发最好的指南。

GCC 4.4版本的变化

C语言相关问题

预处理器条件都被执行

当用#elif时候,现在其参数将被执行,即使前面的#if#elif条件执行结果为非0(onoe-zero)。这样做的目的是确保,它们(宏)是有效的常量表达式。示例代码,如下:

 
 
 
  1. #if 1
  2. #elif
  3. #endif

在新版本下,会产生以下错误诊断:

error: #elif with no expression

修正手段:要么使用不带参数#else,要么为#elif提供常量表达式。

更加严格的“别名”要求

当优化代码时,GCC会对很多“类型双关type-punning”情况,发出告警。例如,

 
 
 
  1. struct A
  2. {
  3. char data[14];
  4. int i;
  5. };
  6.  
  7. void foo()
  8. {
  9. char buf[sizeof(struct
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值