在这个表达式中,我得到的左值是不可修改的

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

最佳答案

由于宏#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;

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

关于c - 如何摆脱c中的“表达式必须是可修改的左值”?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17267952/

10-11 23:20