以c模式编译c++代码

compile c++ code in c mode

本文关键字:c++ 代码 编译 模式      更新时间:2023-10-16

以下是我保存为.cpp文件和.c文件的代码

在.c中,它编译得很好,但在.cpp 中引发了以下错误

test.cpp:6: error: initializer-string for array of chars is too long
test.cpp:6: error: initializer-string for array of chars is too long

 

#include< stdio.h>
int main()
{
char str[2][2]= { "12", "12"};
int i;
for(i=0; i<2; i++)
printf("%d %sn", i, str[i]);
return 0;
}

是否有任何编译器指令或任何东西使得c++编译器将其作为c代码本身。

我试过了,外部的"C",但没有帮助。

字符串"12"在C++中包含3个位置(在C中也是,BTW(。对于终止的'',您还需要一个字符。

char str[2][3]= { "12", "12"};

这将"适合">

char str[2][2] = {
  { '1', '2' },
  { '1', '2' }
};

但你想要这个:https://ideone.com/wZB8F

char str[2][3]= { "12", "12"};

否则,没有空间容纳终止的null字符

等效:

char str[2][3]= { { '1', '2', '' },
                  { '1', '2', '' } };

C++是一种比C更严格的语言。问题是创建一个包含两个字符数组的数组,然后为每个子数组分配三个字符(序列'1''2'和字符串终止符''(。

数组应该这样声明:

char str[2][3]= { "12", "12"};

C编译器不对此进行标记,并跳过字符串终止符,因此printf语句很可能会在字符串之后打印垃圾。

虽然这对您的问题没有帮助,但您可以选择要编译的语言。对于gcc,它是-x标志,后面需要紧跟语言。像gcc-x一样,c.something.cpp…将使用c编译器进行编译。

#include< stdio.h>
int main() 
{
    char str[][3]= { "12","12"}; 
    int i;
    for(i=0; i<2; i++) 
    {
        printf("%d %sn", i, str[i]);
    }
    return 0; 
}

是将在C++中工作的版本。。。。