C89初始化为什么Mingw没有MSVC会引发错误?

时间:2018-10-26 21:05:20

标签: visual-c++ c89

前言:我必须使用C89,并且我知道它没有C99那样的指定初始值设定项。但是,如果将数组包装在结构中,则我的理解是,它可以以与初始化程序相同的格式重复更改。它似乎可以在MINGW C89中使用。

  typedef struct fscratch{
        float contents[SIZEFDT];
    };

    int main()
    {

        fscratch fs;

        fs = (fscratch){400.0, 440.0, 480.0, 500.0, 530.0, 560.0 };     // <--MSVC error here
        memcpy(pt1->flow, fs.contents, sizeof(pt1->flow));
        fs = (fscratch){161.0, 157.0, 153.0, 150.0, 146.0, 142.0};
        memcpy(pt1->psi_disch, fs.contents, sizeof(pt1->psi_disch));

    }

Mingw C89正常运行,没有错误, MSVC给出错误:

  

错误C2059:语法错误:“ {”错误C2143:语法错误:缺少“;”   在'{'错误之前C2143:语法错误:缺少';'在“}”之前

1000行程序的其余部分可以进行一些调整,然后正常运行。这条线是怎么回事?

1 个答案:

答案 0 :(得分:0)

您必须指的是GCC编译器,而不是MinGW。 MinGW是一个开发环境和Windows的一组库,通常与GCC编译器结合使用以创建Windows程序。

Visual Studio也在1990年代中期发布。您一定是在指C98吗?

Visual Studio和gcc都应允许以下内容:

fscratch fs = {161.0, 157.0, 153.0, 150.0, 146.0, 142.0};

在旧版本的Visual Studio中,您只能在声明时初始化数组,而不能在以后初始化:

fscratch fs = { 123.0 }; //<- initialized once, okay in both gcc & VC++
fs = {161.0, 157.0, 153.0, 150.0, 146.0, 142.0};//<- compiler error in older VC++

或者您可以复制内存,这应该在编译器之间更兼容:

#include <string.h>
...
const float data1[] = {161.0, 157.0, 153.0, 150.0, 146.0, 142.0};
memcpy(fs.contents, data1, sizeof(data1));