1.
strchr error: invalid conversion from ‘const char*’ to ‘char’ [-fpermissive]
针对GCC 4.4版本的C/C++软件移植指南 Sep 21, 2012
扩展阅读
如果你希望更加深入的了解GCC相关特性、体系及编程等,可参考以下的材料:
- 各类官方文档
- The Definitive Guide to GCC(William von Hagen著):全面介绍GCC相关内容,包括auto*工具链使用及语言特性的扩展等。
- Unix to Linux Porting (Alfredo mendoza等著):这是*nix软件移植开发最好的指南。
GCC 4.4版本的变化
C语言相关问题
预处理器条件都被执行
当用时候,现在其参数将被执行,即使前面的或条件执行结果为非0(onoe-zero)。这样做的目的是确保,它们(宏)是有效的常量表达式。示例代码,如下:
在新版本下,会产生以下错误诊断:
修正手段:要么使用不带参数,要么为提供常量表达式。
更加严格的“别名”要求
当优化代码时,GCC会对很多“类型双关type-punning”情况,发出告警。例如,
在新版本下,会产生以下错误诊断:
可以使用为变通方案或使用忽略此类问题。要修正问题,可以通过访问结构体,用一个union,用memcpy或(如果是C++)用操作替换。
C++语言相关问题
头文件依赖调整
针对头文件依赖,一些标准C++库include文件已被优化,仅include最小可能数量的附加文件。因此,使用了而没有include <cstdio> 的C++程序,或使用了而没有include <stdint.h> 的,将不再编译,而是 错。
具体细节,如下:
文件<cstdio>将不再作为<string>,<ios>,<iomanip>,<streambuf>,或<locale>的一部分被include。
文件<stdint.h>将不再作为<string>或<ios>的一部分被include.
限制null终止(null-terminated)序列的函数
一些C++库include已被修改,来替换C库函数的重载,以提高常量的正确性(const-correctness):接收const char,同时返回const char的函数。相关变更,如下表所示:
头文件 | 函数 |
---|---|
<cstring> | , , , , |
<cwchar> | , , , |
应用示例,如下:
编译时,会 如下错误:
修正方式,如下:
初始化调整
GCC 4.4默认不再支持如下的代码:
编译这个代码会 以下错误:
用初始化成员即可解决相关问题。具体,如下:
2.
Compiler error: memset was not declared in this scope
You should include (or its C++ equivalent, ).
50 down vote |
Whevever you get a problem like this just go to the man page for the function in question and it will tell you what header you are missing, e.g. |
3. ‘int32_t’ does not name a type
4. ‘bzero’ was not declared in this scope
‘strncpy’ was not declared in this scope
#include <string.h>
文章知识点与官方知识档案匹配,可进一步学习相关知识C技能树首页概览113900 人正在系统学习中
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!