2015-08-23 27 views
11

यदि मेरे पास एक स्थैतिक स्थानीय चर या थ्रेड_लोकल स्थानीय चर है जो कि अंतिम अनुवाद इकाइयों में परिभाषित एक इनलाइन फ़ंक्शन के भीतर है, तो अंतिम प्रोग्राम में वे मानक के समान पते के लिए गारंटी देते हैं?इनलाइन फ़ंक्शंस के स्थानीय स्थिर/थ्रेड_लोकल चर?

// TU1: 
inline int* f() { static int x; return &x; } 
extern int* a; 
void sa() { a = f(); } 

// TU2: 
inline int* f() { static int x; return &x; } 
extern int* b; 
void sb() { b = f(); } 

// TU3: 
int *a, *b; 
void sa(); 
void sb(); 
int main() { sa(); sb(); return a == b; } 

उपरोक्त हमेशा 1 लौटाएंगे?

उत्तर

9

हां, यह हमेशा एक ही वस्तु है। [Dcl.fct.spec] द्वारा/4:

बाहरी लिंकेज के साथ एक inline समारोह सभी अनुवाद इकाइयों में एक ही पते होगा। एक static स्थानीय चर extern inline फ़ंक्शन में हमेशा एक ही ऑब्जेक्ट को संदर्भित करता है। extern inline फ़ंक्शन के शरीर के भीतर परिभाषित एक प्रकार प्रत्येक अनुवाद इकाई में एक ही प्रकार है।

+0

धन्यवाद, और मुझे लगता है कि 'thread_local' केस का एक समान जवाब है? –

+0

@AndrewTomazos: हाँ, मुझे ऐसा लगता है, क्योंकि [dcl.stc]/4 द्वारा, 'thread_local' विनिर्देशक 'स्थिर' विनिर्देशक का तात्पर्य है, और उत्तर में उद्धृत नियम * विनिर्देशक * पर लागू होता है, भंडारण नहीं कक्षा। –

संबंधित मुद्दे