先验常数计算
a priori constant calculation
我想定义一个常量整数作为编译期间简单的 +-* 和/ 操作的结果。我尝试使用 const double XMIN = ..
但这不允许在其右侧使用其他常量。所以我不能做出以下定义:
#define SEED_GRAIN 1e5
#define XMIN -0.2f
#define XMAX 0.2f
#define XLENGTH (XMAX-XMIN)
#define XRAND ((XLENGTH*SEED_GRAIN)+1)
作为随机数区间数的先验计算,我使用如下:
x = rand()%(int)XRAND;
x = pt.x/SEED_GRAIN + XMIN;
这在 Mac 上的某些 C 编译器下工作,但 Windows SDK 以下列方式抱怨 (int)XRAND
行:
error C2105: '--' needs l-value
error C2143: syntax error : missing ')' before 'constant'
我想所有这些都可以用常量而不是那些丑陋的编译器定义来完成,但我还没有深入了解什么时候某些东西被视为编译器的常量表达式。有人可以指导我找到干净的解决方案吗?
Fwiw 我正在 matlab 中编译一个 mex 文件,正如所解释的那样,它可以在 mac 上使用标准编译器和 mex -O CFLAGS='$CFLAGS -std=c11' main.c
但拒绝在 windows 下使用 sdk 7.1
进行编译
在 #define
s 中使用整数和浮点数时,将它们放在括号中。
#define SEED_GRAIN (1e5)
#define XMIN (-0.2f)
#define XMAX (0.2f)
或者你可以这样做
const double sees_grain = 1e5;
const double xmin = -0.2f;
const double xmax = 0.2f;
如果其他两个在全球范围内需要它们,除了这样做别无他法:
#define XLENGTH (xmin - xmax)
#define XRAND ((XLENGTH * seed_grain) + 1.)
of 只需在 运行 时间通过
定义和初始化它们
double xlength = 0.;
double xrand = 0.;
int main(void)
{
xlength = xmin - xmax;
xrange = (xrange * seed_grain) + 1.;
...
原因是 (XMAX-XMIN)
将扩展为 (XMAX--0.2f)
,然后 --
被视为运算符而不是 - -0.2f
。
我想定义一个常量整数作为编译期间简单的 +-* 和/ 操作的结果。我尝试使用 const double XMIN = ..
但这不允许在其右侧使用其他常量。所以我不能做出以下定义:
#define SEED_GRAIN 1e5
#define XMIN -0.2f
#define XMAX 0.2f
#define XLENGTH (XMAX-XMIN)
#define XRAND ((XLENGTH*SEED_GRAIN)+1)
作为随机数区间数的先验计算,我使用如下:
x = rand()%(int)XRAND;
x = pt.x/SEED_GRAIN + XMIN;
这在 Mac 上的某些 C 编译器下工作,但 Windows SDK 以下列方式抱怨 (int)XRAND
行:
error C2105: '--' needs l-value
error C2143: syntax error : missing ')' before 'constant'
我想所有这些都可以用常量而不是那些丑陋的编译器定义来完成,但我还没有深入了解什么时候某些东西被视为编译器的常量表达式。有人可以指导我找到干净的解决方案吗?
Fwiw 我正在 matlab 中编译一个 mex 文件,正如所解释的那样,它可以在 mac 上使用标准编译器和 mex -O CFLAGS='$CFLAGS -std=c11' main.c
但拒绝在 windows 下使用 sdk 7.1
在 #define
s 中使用整数和浮点数时,将它们放在括号中。
#define SEED_GRAIN (1e5)
#define XMIN (-0.2f)
#define XMAX (0.2f)
或者你可以这样做
const double sees_grain = 1e5;
const double xmin = -0.2f;
const double xmax = 0.2f;
如果其他两个在全球范围内需要它们,除了这样做别无他法:
#define XLENGTH (xmin - xmax)
#define XRAND ((XLENGTH * seed_grain) + 1.)
of 只需在 运行 时间通过
定义和初始化它们double xlength = 0.;
double xrand = 0.;
int main(void)
{
xlength = xmin - xmax;
xrange = (xrange * seed_grain) + 1.;
...
原因是 (XMAX-XMIN)
将扩展为 (XMAX--0.2f)
,然后 --
被视为运算符而不是 - -0.2f
。