Bu programı g ++ ve clang ++ ile derledim. Bir fark var:
g ++ 1 yazdırır, ancak clang ++ 2 yazdırır.
Görünüşe göre
g ++: extern değişkeni en kısa kapsamda tanımlanmıştır.
clang ++: extern değişkeni en kısa global kapsamda tanımlanır.
C ++ spec bu konuda herhangi bir şartname var mı?
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;
}
}
other.cpp
int i;
sürüm: g ++: 7.4.0 / clang ++: 10.0.0
derleme: $ (CXX) main.cpp diğer.cpp -o extern.exe
MSVC
ve clang-cl
(her ikisi de vermek 2
) ile extern int i
uğraşırken, her ikisi tarafından tamamen görmezden geliyor gibi görünüyor : ben other.cpp
dosyada bağlantı olmasa bile , program inşa ve çalışır.
i
.