这是一个简单的代码
void GlobalAlterA(A *a) { a->m = 1; }
struct A { int n, int m; };
struct Z: public A { void AlterA() { GlobalAlterA(this); } };
struct Y: public Z {};
struct X: public Y
{
int AsValue()
{
switch (n)
{
case 0: return m;
default: AlterA(); return m;
}
}
};
现在,这段代码的问题是 gcc 优化器丢弃了除“return m”之外的所有 AsValue() 代码,因为我想,它看不到 GlobalAlterA() 主体,也不知道 AlterA() 可以改变“m”成员。
除了关闭代码特定部分的优化之外,有没有办法解决这个问题?例如 volatile 说明符等技巧。