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相关特性、体系及编程等,可参考以下的材料:
- 各类官方文档
- The Definitive Guide to GCC(William von Hagen著):全面介绍GCC相关内容,包括auto*工具链使用及语言特性的扩展等。
- Unix to Linux Porting (Alfredo mendoza等著):这是*nix软件移植开发最好的指南。
GCC 4.4版本的变化
C语言相关问题
预处理器条件都被执行
当用#elif时候,现在其参数将被执行,即使前面的#if或#elif条件执行结果为非0(onoe-zero)。这样做的目的是确保,它们(宏)是有效的常量表达式。示例代码,如下:
- #if 1
- #elif
- #endif
在新版本下,会产生以下错误诊断:
error: #elif with no expression
修正手段:要么使用不带参数#else,要么为#elif提供常量表达式。
更加严格的“别名”要求
当优化代码时,GCC会对很多“类型双关type-punning”情况,发出告警。例如,
- struct A
- {
- char data[14];
- int i;
- };
- void foo()
- {
- char buf[sizeof(struct A)];
GCC 4.4 C/C++软件移植:问题与解决方案

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

被折叠的 条评论
为什么被折叠?



