首页 > 学院 > 开发设计 > 正文

源程序采用UNICODE编码时GCC编译器会发出null character(s) ignored警告

2019-11-11 04:56:54
字体:
来源:转载
供稿:网友

        将一个只用到标准库函数的 C 程序在 Windows 平台上用 VS 2010 编译,没有出任何问题。再将它放到 64 位 CentOS 6.8 下,用 GCC 编译它,接收到一大堆警告和错误报告,如下图:

        其中大部分是“null character(s) ignored”警告,还有一些像stray '***' 这样的错误。经过调查发现,原因在于在 Windows 平台上用文本编辑器保存这个 C 程序时,因为在其中用中文写了一些注释,保存时将编码设置为了 UNICODE,但是 GCC 编译器不能识别 UNICODE 编码格式的源文件,就会产生如上图所示的警告和错误。(注意: UNICODE 本身是一个很大的概念,包含 UTF-8、UTF-16、UTF32。但 Windows 平台上的 UNICODE 实质上是指 UTF-16 编码,linux 平台上通常采用 UTF-8 编码。)

        由于只是想让这个 C 程序在 CentOS 6.8 上能执行,并不需要在 Linux 下编辑它,所以最简单的解决方法就是在 Windows 平台上用文本编辑器(比如 Notepad、Notepad++ 等)将这个 C 程序的源文件转换成 ASCII 编码或 UTF-8 编码。从 Windows 7 开始,自带的记事本 Notepad 在“另存为”时都允许用户选择编码方式。如下图所示:

        于是只需用记事本将原来的 C 程序另外保存一份,编码选择 ASNI 或 UTF-8 都可以,接下来将新保存的文件拿到 CentOS 6.8 下用 GCC 编译。此时程序就能顺利地被编译,GCC 不再报告警告和错误了。

        Windows 下的 Visual Studio 能够很好地自动识别源程序的编码方式,经过实验后发现:将上面的 C 程序文件以 ANSI、Unicode、Unicode big endian、UTF-8 四种编码方式分别保存,在 VS 2010 中分别编译,都能够成功编译,不会像 GCC 那样产生警告和错误。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表