前言:我必须使用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行程序的其余部分可以进行一些调整,然后正常运行。这条线是怎么回事?
答案 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));