C++ में घोषणा और परिभाषा में क्या अंतर है?
नमस्ते! मैंने हाल ही में C++ सीखना शुरू किया है और मैं लगातार 'declaration' और 'definition' शब्दों में भ्रमित हो जाता हूँ। ये समान लगते हैं, लेकिन compiler अलग-अलग चीज़ों पर त्रुटि देता है।
यहाँ एक उदाहरण है जिसने मुझे भ्रमित किया। मैंने यह कोड लिखा:
```cpp
#include
int x; // यह declaration है या definition?
extern int y; // और यह?
void foo(); // और यह?
int main() {
std::cout << x;
return 0;
}
void foo() {
// कुछ implementation
}
```
अगर मैं `void foo() { ... }` हटा दूँ और केवल `void foo();` छोड़ दूँ, तो compiler linker error देता है। लेकिन अगर मैं `extern` के बिना `int x;` लिखूँ, तो सब काम करता है। ऐसा क्यों? किन मामलों में `int x;` declaration है और किनमें definition? और ODR (One Definition Rule) क्या है? कृपया सरल शब्दों में, उदाहरणों के साथ समझाएँ ताकि मैं अब और भ्रमित न होऊँ।