C 常数的正确定义
我在以正确的方式定义代码中使用的常量时遇到了一些问题。虽然我读了乔纳森·莱夫勒在的优秀文章,但我似乎误解了一些东西。以下是设置:C 常数的正确定义,c,arrays,global-variables,C,Arrays,Global Variables,我在以正确的方式定义代码中使用的常量时遇到了一些问题。虽然我读了乔纳森·莱夫勒在的优秀文章,但我似乎误解了一些东西。以下是设置: /* constants.h */ extern int NUM_PARTICLES; extern int LIGHTSPEED; 此标题在和中使用,如下所示 #include "constants.h" int NUM_PARTICLES=104; 以随机方式。h或 分别在main.c中。中的main.c中使用了NUM_粒子 30: double g
/* constants.h */
extern int NUM_PARTICLES;
extern int LIGHTSPEED;
此标题在和中使用,如下所示
#include "constants.h"
int NUM_PARTICLES=104;
以随机方式。h或
分别在main.c中。中的main.c中使用了NUM_粒子
30: double ghosts[NUM_PARTICLES][4];
31: double output[NUM_PARTICLES][3];
虽然这个方法有效,但我得到以下警告
main.c: In function ‘int main()’:
main.c:30:32: warning: ISO C++ forbids variable length array ‘ghosts’ [-Wvla]
main.c:31:32: warning: ISO C++ forbids variable length array ‘output’ [-Wvla]
这很奇怪,因为在我看来,我确实给了数组一个在编译时已知的常量值。通常这些数组长度错误会导致一些SEGFULT,在这种情况下它们不会。有什么想法吗?短篇小说:这是C 通常,您会将整数常量定义为
const int LIGHTSPEED = 104;
问题在于,根据语言规则,该常量不是常量表达式,因此不能用于指定静态分配数组的大小
C标准6.6/6的相关部分,我不是在编,它定义了什么是整数常量表达式:
整数常量表达式应具有整数类型,且应
仅具有整数常量、枚举常量、,
字符常量,sizeof表达式,其结果为整数
常量和作为的直接操作数的浮点常量
演员
有两种解决方案。经典的方法是使用宏,在编译器看到代码之前,只需在尖括号之间粘贴104,从而使数组大小成为一个整数常量:
#define NUM_PARTICLES 104
enum { NUM_PARTICLES = 104 };
更好的方法是避免使用宏,因为您可以使用枚举,也可以使用枚举常量:
#define NUM_PARTICLES 104
enum { NUM_PARTICLES = 104 };
短篇故事:这是C 通常,您会将整数常量定义为
const int LIGHTSPEED = 104;
问题在于,根据语言规则,该常量不是常量表达式,因此不能用于指定静态分配数组的大小
C标准6.6/6的相关部分,我不是在编,它定义了什么是整数常量表达式:
整数常量表达式应具有整数类型,且应
仅具有整数常量、枚举常量、,
字符常量,sizeof表达式,其结果为整数
常量和作为的直接操作数的浮点常量
演员
有两种解决方案。经典的方法是使用宏,在编译器看到代码之前,只需在尖括号之间粘贴104,从而使数组大小成为一个整数常量:
#define NUM_PARTICLES 104
enum { NUM_PARTICLES = 104 };
更好的方法是避免使用宏,因为您可以使用枚举,也可以使用枚举常量:
#define NUM_PARTICLES 104
enum { NUM_PARTICLES = 104 };
除了你的问题,你还有一个问题,你编译C代码作为C++,这不是一个好主意。特别是,处理两个条件下的变量是不同的。是的,我有一种鬼鬼祟祟的感觉,把C和C++混合会造成一些问题,但是很不幸我不能改变它。除了你的问题,你还有一个问题,你编译C代码作为C++,这不是一个好主意。特别是,处理两个条件下的变量是不同的。是的,我有一种鬼鬼祟祟的感觉,把C和C++混合会造成一些问题,但是很不幸我不能改变它。D