Существует два типа разрешения области действия операторы в C ++ - унарная область действия и область действия класса. Не существует ни области действия функции, ни оператора разрешения «какой-либо конкретной родительской области». Это делает невозможным решение вашей проблемы в целом, поскольку вы не можете ссылаться на анонимные области. Однако вы можете создать псевдоним, переименовать переменные или сделать его частью класса, что, конечно, подразумевает изменение кода. Это самое близкое, что я могу получить без переименования в данном конкретном случае:
#include <iostream>
using namespace std;
int v = 1; // global
class Program
{
static int v; // local
public:
static int main ()
{
int v = 3; // within subscope
cout << "subscope: " << v << endl;
cout << "local: " << Program::v << endl;
cout << "global: " << ::v << endl;
}
};
int Program::v = 2;
int main ()
{
return Program::main ();
}
Есть и другие способы, например, убедиться, что переменные не оптимизированы и находятся в стеке, затем вы можете напрямую работать со стеком, чтобы получить значение переменной, которую вы хотите, но давайте не будем идти по этому пути.
Надеюсь, это поможет!