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