ฉันรวบรวมโปรแกรมนี้โดย g ++ และ clang ++ มีความแตกต่าง:
g ++ พิมพ์ 1 แต่พิมพ์ clang ++ 2
ดูเหมือนว่า
g ++: var var ที่กำหนดไว้ในขอบเขตที่สั้นที่สุด
clang ++: ตัวแปร extern ถูกกำหนดในขอบเขตโกลบอลที่สั้นที่สุด
ข้อมูลจำเพาะ 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;
}
}
other.cpp
int i;
รุ่น: g ++: 7.4.0 / clang ++: การ
รวบรวม10.0.0 : $ (CXX) main.cpp other.cpp -o extern.exe
MSVC
และclang-cl
(ให้ทั้งสอง2
) ดูเหมือนว่าextern int i
ทั้งสองจะถูกละเว้นโดยสมบูรณ์: แม้ว่าฉันจะไม่เชื่อมโยงในother.cpp
ไฟล์โปรแกรมสร้างและทำงาน
i
มันไม่ได้ลอง