嘿,我目前正在尝试从c ++切换到c,想知道是否有任何方法可以避免这种情况,因为没有更多的类可以使用隐式this->
:
void func(Data *const longAndExpressiveName)
{
longAndExpressiveName->x += longAndExpressiveName->vel.x;
}
因为即使名称不是那么长,它仍然使代码更难理解。
在C 中没有语法可以完成您的直接请求。您最接近的方法就是创建临时变量。
int *xptr = &longAndExpressiveName->x;
int vel_x = longAndExpressiveName->vel.x;
*xptr += vel_x;
在这种情况下,您使用longAndExpressiveName
的愿望是错误的,因为在C++中,您来自一种语法,其中longAndExpressiveName
不是作为参数传递的,并且该参数被隐式this->
隐式隐藏。调用方的C++语法为:
longAndExpressiveName->func();
您将其转换为:
func(longAndExpressiveName);
然后将相同的名称传播到参数名称。虽然调用方可能适合使用长而富有表现力的名称引用指针,但它对"成员"函数并没有真正的帮助。但是,如果函数被命名,以便您知道它旨在对特定类型的结构执行某些操作,这将很有帮助。
void func_Data(Data * const d) {
d->x += d->vel.x;
}
哪个更好地捕获了原始C++语法:
void Data::func () {
x += vel.x;
}
C 没有任何魔术语法来明确地执行您想要的操作。但是,您可以只将具有长而富有表现力的名称的参数分配给具有较短名称的相同或兼容类型的变量:
void func(Data *const longAndExpressiveName)
{
Data *const t = longAndExpressiveName;
t->x += t->vel.x;
}
如果长而富有表现力的名称会在函数中大量重复,这将减少键入。