无法在C中定义大小定义为符号常量的全局数组

无法在C中定义大小定义为符号常量的全局数组,c,gcc,C,Gcc,数组的大小定义为符号常量,如下所示: 定义N intN_AB+0.5*LxIni+LxIni N稍后用于声明由双元素组成的全局数组。 全局数组声明如下: 双接收[N] 但是,我得到以下错误: 文件范围内可变修改的“rx” 你能帮我做这个吗 文件范围内可变修改的“rx” 此错误消息意味着您可能无法定义具有静态存储持续时间的可变长度数组文件作用域变量具有静态存储持续时间。您需要动态分配数组或在块范围中声明它。在最后一种情况下,如果没有存储说明符static,它将具有自动存储持续时间。浮点0.5可防止

数组的大小定义为符号常量,如下所示:

定义N intN_AB+0.5*LxIni+LxIni

N稍后用于声明由双元素组成的全局数组。 全局数组声明如下:

双接收[N]

但是,我得到以下错误:

文件范围内可变修改的“rx”

你能帮我做这个吗

文件范围内可变修改的“rx”

此错误消息意味着您可能无法定义具有静态存储持续时间的可变长度数组文件作用域变量具有静态存储持续时间。您需要动态分配数组或在块范围中声明它。在最后一种情况下,如果没有存储说明符static,它将具有自动存储持续时间。

浮点0.5可防止将数组大小视为整数常量表达式。您可以改为除以整数2,将0.5*LxIni+LxIni更改为LxIni+LxIni/2。您还可以将其更改为LxIni,如果没有溢出或包装,则在数学上应该是等效的。这是一个打字错误,你的意思是添加两个不同的东西,而不是添加一些东西本身,然后除以二,这似乎是没有意义的

这在C语言的设计中是有意的;静态持续时间数组的大小必须是整数常量表达式,该表达式不能在算术中使用浮点操作数,除非C实现可以选择允许它们

C 2018 6.7.6.2 2规定具有静态存储持续时间(包括在函数外部定义的阵列)的对象不得具有可变长度阵列类型:

…如果标识符被声明为具有静态或线程存储持续时间的对象,则它不应具有可变长度数组类型

6.7.6.2 4表示如果大小不是整数常量表达式,则数组为可变长度数组类型:

…如果大小是整数常量表达式,且元素类型具有已知常量大小,则数组类型不是可变长度数组类型;否则,数组类型为可变长度数组类型

6.6.6限制在整数常量表达式中使用浮点常量[粗体添加]:

…整型常量表达式应具有整型,并且只能具有整型常量、枚举常量、字符常量、结果为整型常量的sizeof表达式、_Alignof表达式和作为强制转换的直接操作数的浮点常量的操作数

C实现可以选择在整数常量表达式中支持浮点运算,如6.6.10所述:

实现可以接受其他形式的常量表达式


但是,您的实现显然选择不这样做。

请发布a。请发布N_AB和LxIni。0.5*LxIni+LxIni的意义是什么?N稍后用于声明由双元素组成的全局数组。请不要解释,而是显示代码。N在代码中到底是如何使用的?int rx[N][N]?可能在许多…:N_AB和LxIni也是计算N的符号常数。N_AB和LxIni也是计算N的符号常数什么是符号常数?请不要解释代码,请显示代码。请编辑您的帖子,并在那里发布其他有用的信息。在C语言中,没有符号常量-定义中引入的标识符称为宏。