【发布时间】:2015-04-10 14:45:04
【问题描述】:
以下程序在 C 中可以正常编译并出现警告,但在 C++ 中编译失败。为什么?是什么原因?
#include <stdio.h>
int main(void)
{
char a[5]="Hello";
a[0]='y';
puts(a);
for(int i=0;i<5;i++)
printf("%c",a[i]);
return 0;
}
警告:
Warning:[Error] initializer-string for array of chars is too long [-fpermissive] enabled by default
但是如果程序被编译为 C++ 程序,那么 C++ 编译器会给出以下错误:
[Error] initializer-string for array of chars is too long [-fpermissive]
我正在使用 GCC 4.8.1 编译器。
【问题讨论】:
-
C 和 C++ 是不同的语言。
-
将 Hello 存储为 asciiz 字符串需要 6 个字符
-
您应该编码
char a[]="Hello";以确保有一个终止 0 字节 -
@Milind:C 是宽松的。 C++ 不是。
-
其实这个问题的前提是不正确的。 两次你都在使用 C++ 编译器,但是一旦它默认使用
-fpermissive编译.-fpermissive根本不是 GCC C 编译器选项!