Я компилирую эту программу с помощью g ++ и clang ++. Есть разница:
g ++ печатает 1, но clang ++ печатает 2.
Кажется, что
g ++: внешняя переменная определена в кратчайшей области.
clang ++: внешняя переменная определена в кратчайшая глобальная область.
Имеет ли C ++ spe c какие-либо технические характеристики по этому поводу?
main. cpp
#include <iostream>
static int i;
static int *p = &i;
int main() {
int i;
{
extern int i;
i = 1;
*p = 2;
std::cout << i << std::endl;
}
}
прочее. cpp
int i;
версия: g ++: 7.4.0 / clang ++: 10.0.0
компиляция: $ (CXX) main. cpp other. cpp -o extern.exe