如何在c中摆脱“表达式必须是可修改的左值”?

时间:2013-06-24 04:17:14

标签: c

我在这个表达式

中得到左值不可修改
tmp_ux =tmp_ux+ tau*(-G*tmp_phi*grad_phi_x)/tmp_rho;

我正在使用的变量是

double tmp_ux
#define tau 1.0
#define G -6.0
double tmp_phi
double grad_phi_x
double tmp_rho

1 个答案:

答案 0 :(得分:7)

由于宏#define G -6.0,表达式

tmp_ux =tmp_ux+ tau*(  -G  *tmp_phi*grad_phi_x)/tmp_rho;

变,

tmp_ux =tmp_ux+ tau*( --6.0  *tmp_phi*grad_phi_x)/tmp_rho;

此处,--6.0是非法的,因为您试图减少6.0

要避免这种情况,请将表达式更改为

tmp_ux =tmp_ux+ tau*( (-1) * G*tmp_phi*grad_phi_x)/tmp_rho;

或者,

正如评论中所提到的,将宏定义为非常优雅

#define G (-6.0)

所以,你的表达式扩展为,

tmp_ux =tmp_ux+ tau*(  -(-6.0) *tmp_phi*grad_phi_x)/tmp_rho;

两者都可以解决这个错误。