मैं इस प्रोग्राम को g ++ और clang ++ द्वारा संकलित करता हूं। एक अंतर है:
जी ++ प्रिंट 1, लेकिन क्लैंग ++ प्रिंट्स 2.
ऐसा लगता है कि
जी ++: एक्सटर्नल वेरिएबल को सबसे कम दायरे में परिभाषित किया गया है।
क्लैंग ++: एक्सटर्नल वेरिएबल को सबसे कम वैश्विक दायरे में परिभाषित किया गया है।
क्या सी ++ के बारे में कोई विनिर्देश है?
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 -oExo.exe
MSVC
और clang-cl
दोनों देते हैं 2
) में अपने कोड के साथ खेलना , ऐसा लगता है कि extern int i
दोनों द्वारा पूरी तरह से अनदेखा किया गया है: भले ही मैं other.cpp
फ़ाइल में लिंक नहीं करता हूं , प्रोग्राम बनाता है और चलता है।
i
, यह कोशिश नहीं करता है।