বাহ্যিক স্থানীয় ভেরিয়েবলগুলিতে কোন লিঙ্কেজগুলি মঞ্জুর করা হচ্ছে তা আমি যখন যাচ্ছিলাম তখন
আমি দেখতে পেলাম যে সংযোজকগুলির মধ্যে কিছু ভিন্ন আচরণ রয়েছে
উদাহরণস্বরূপ, যদি আমি কোডের নীচে পরীক্ষা করে
দেখি যেমন আপনি মন্তব্যগুলিতে দেখেন তবে var
এর বিভিন্ন লিঙ্ক রয়েছে
// foo.cpp
int var = 10; // external linkage
// main.cpp
#include <iostream>
static int var = 100; // internal linkage
int main() {
extern int var; // internal linkage
std::cout << var << std::endl;
{
extern int var; // g++: external linkage , clang++: internal linkage
std::cout << var << std::endl;
{
extern int var; // g++: external linkage , clang++: internal linkage
std::cout << var << std::endl;
}
}
}
ফলাফল হলো
- g ++: "100 10 10"
- ঝনঝন ++: "100 100 100" (এমএসভিসি ++)
আমি ফলাফলটি থেকে দেখতে পাচ্ছি যে যদি দুটি অধিক নেস্টেড ব্লক থাকে তবে
g ++ কেবল ভেরিয়েবলগুলিতে বাহ্যিক সংযোগ দেয়
আমি স্ট্যান্ডার্ডে সম্পর্কিত বাক্যাংশটি খুঁজে পেতে পারি
তবে এটি এখনও অস্পষ্ট কারণ এর আচরণটি সংকলকগুলির দ্বারা পৃথক
( https://eel.is/c++traft/basic.link#6 )
আমার আশংকা আছে যে আমার ইংরেজি খারাপ তাই আমি এটি সঠিকভাবে পেতে পারি না
কারও যদি ধারণা থাকে যে কোন সংকলকগণ মানটিকে ভালভাবে মেনে চলেছে
এবং যদি সম্ভব হয় তবে কেউ যদি আমার কাছে স্ট্যান্ডার্ডটি সম্পর্কে ঠিক কী বলে যায় তবে তা বিস্তারিতভাবে ব্যাখ্যা করতে পারে?
f()
ফাংশন সহ উদাহরণ দেয় এবংextern void f()
অভ্যন্তরীণতমটির অভ্যন্তরীণ যোগসূত্র থাকে -var
এখানেও অভ্যন্তরীণ সংযোগ থাকতে হবে, কারণ এটি একই "সত্তা" বোঝায়।