C ભાષામાં storage classes એ ખૂબ જ મહત્વપૂર્ણ વિષય છે. ચાલો હું તેને સરળ ગુજરાતીમાં સમજાવું.
Storage Class શું છે?
C ભાષામાં, દરેક
variable અને function ની
એક Storage Class હોય છે. Storage Class નીચેની
બે મુખ્ય બાબતો નક્કી કરે છે:
1. Variable/Function
નો Scope (ક્ષેત્ર): તે કયા ભાગના પ્રોગ્રામમાં ઍક્સેસ
કરી શકાય છે (જેમ કે સિર્ફ એક function અંદર અથવા સમગ્ર
પ્રોગ્રામમાં).
2. Variable/Function
નો Lifetime (આયુષ્ય): તે variable મેમરીમાં
કેટલા સમય સુધી રહેશે (જેમ કે function ચાલતી વખતે જ
અથવા પ્રોગ્રામ બંધ થયા સુધી).
C ભાષામાં
મુખ્ય Storage Classes ના પ્રકારો
C ભાષામાં મુખ્યત્વે નીચેની ચાર Storage
Classes હોય છે:
1. auto
2. register
3. static
4. extern
તેને સમજવા માટે નીચેનું વિગતવાર સમજવું જરૂરી છે.
1. auto
Storage Class (ઓટો સ્ટોરેજ ક્લાસ)
ગુજરાતી
અર્થ: સ્વચાલિત
ડિફોલ્ટ
વર્તન: જો તમે કોઈ variable બનાવો અને તેની પાસે કોઈ storage class નિર્દિષ્ટ ન કરો, તો તે auto storage class નો હોય છે.
સ્થાન
(Storage): આ variable RAM (મેમરી)
માં સંગ્રહિત થાય છે.
ડિફોલ્ટ
વેલ્યુ (Default Value): જો તમે auto variable ની
કોઈ શરૂઆતની કિંમત (initial value) સેટ ન કરો, તો
તેમાં garbage value (કચરો મૂલ્ય) હોય છે.
Scope
(ક્ષેત્ર): માત્ર તે function અથવા block
({ } ની અંદર) જ્યાં તેને બનાવવામાં આવ્યો હોય.
Lifetime
(આયુષ્ય): જ્યાં સુધી તે function અથવા
block ચાલુ છે ત્યાં સુધી.
ઉદાહરણ:
```c
include <stdio.h>
void myFunction() {
auto int x = 10; // 'auto' keyword નો ઉપયોગ કરવો optional
છે.
int y = 20; // આ પણ auto variable જ છે.
printf("x =
%d, y = %d\n", x, y);
}
int main() {
myFunction();
// printf("%d",
x); // આ એરર આપશે કારણ કે 'x' અહીં
ઍક્સેસ કરી શકાય નહીં.
return 0;
}
```
2. Register
Storage Class (રજિસ્ટર સ્ટોરેજ ક્લાસ)
ગુજરાતી
અર્થ: નોંધણી કરવી
ઉદ્દેશ્ય:
CPU ના register માં
variable ને સંગ્રહિત કરવાનો પ્રયાસ કરે છે. Register
એ CPU ની અંદરની ખૂબ જ ઝડપી મેમરી છે, તેથી જે variables નો ઘણી વાર ઉપયોગ થાય છે (જેમ કે loop
counter) તેને register માં
રાખવાથી પ્રોગ્રામની સ્પીડ વધે છે.
નોંધ:
આ માત્ર એક વિનંતી (request) છે. જો register ભરેલા
હોય, તો compiler તેને
સામાન્ય auto variable તરીકે જ RAM માં
સંગ્રહિત કરશે.
ડિફોલ્ટ
વેલ્યુ: garbage value
Scope:
માત્ર તે function અથવા block અંદર.
Lifetime:
function/block ચાલતી વખતે.
ઉદાહરણ:
```c
include <stdio.h>
int main() {
register int
counter; // ઝડપી ઍક્સેસ માટે registerમાં રાખવાનો પ્રયાસ.
for(counter = 1; counter <= 1000; counter++) {
printf("%d\n", counter);
}
// 'counter'
નો અહીં ઘણી વાર ઉપયોગ થશે, તેથી register
વર્ગ સારો છે.
return 0;
}
```
મહત્વની નોંધ: register variable નો & (address-of) ઓપરેટર સાથે
ઉપયોગ કરી શકાય નહીં કારણ કે CPU રજિસ્ટરનું સ્થાન (address) RAM જેવું નથી હોતું.
`scanf("%d", &counter);` // ભૂલ
(Error) આપશે.
3. Static
Storage Class (સ્ટેટિક સ્ટોરેજ ક્લાસ)
ગુજરાતી
અર્થ: સ્થિર
ઉદ્દેશ્ય:
Variable નું મૂલ્ય function call વચ્ચે
જાળવી રાખવું.
સ્થાન:
RAM માં.
ડિફોલ્ટ
વેલ્યુ: જો initial value ન આપો તો તે સ્વયંભૂબે 0 થાય છે.
Scope:
તે function અથવા file અંદર
(જ્યાં તે declare થયેલ છે).
Lifetime:
પ્રોગ્રામ બંધ થયા સુધી.
ઉદાહરણ:
```c
include <stdio.h>
void count() {
static int s = 0; // static variable, હર વખતે 0 થશે
નહીં.
s++;
printf("Static variable s = %d\n", s);
}
int main() {
count(); // s = 1
count(); // s = 2
count(); // s = 3
//
નોંધ લો: દરેક વાર function ફરી શરૂ થાય છે પણ static variableની value જાળવી રહે છે.
return 0;
}
```
આઉટપુટ:
```
Static variable s = 1
Static variable s = 2
Static variable s = 3
```
4. Extern
Storage Class (એક્સ્ટર્ન સ્ટોરેજ ક્લાસ)
ગુજરાતી
અર્થ: બાહ્ય
ઉદ્દેશ્ય:
બીજી file માં define કરેલ
variable અથવા function નો
ઉપયોગ આ file માં કરવો.
સ્થાન:
RAM માં.
ડિફોલ્ટ
વેલ્યુ: 0
Scope:
જે file માં extern તરીકે
declare કરેલ છે તે સમગ્ર પ્રોગ્રામ (બધી files)
માં.
Lifetime:
પ્રોગ્રામ બંધ થયા સુધી.
ઉદાહરણ:
ધારો કે અમારી પાસે બે files છે: `main.c` અને `external.c`
File 1: external.c
```c
// આ file માં
global variable અને function define કરેલ
છે.
int globalVar = 50; // global variable
void demoFunction() {
//
કંઈક કાર્ય
}
```
File 2: main.c
```c
include <stdio.h>
extern int globalVar; // extern વપરાશથી
કહેવું છે કે 'globalVar' બીજી file માં
છે.
extern void demoFunction(); // function માટે
પણ extern વપરાય છે.
int main() {
printf("Global variable from another file: %d\n", globalVar);
demoFunction();
return 0;
}
```
આ પ્રોગ્રામ compile કરવા
માટે તમારે બન્ને filesને એકસાથે જોડવી પડશે (link કરવી પડશે).
`gcc main.c external.c -o myProgram`
0 ટિપ્પણીઓ
Please do not Enter any Spam Link in the Comment box.😈