C भाषा में storage class specifiers कंपाइलर को कहा जाता है, एक variable/function की विशेषताओं के बारे में वर्णन करने के लिए स्टोरेज क्लासेस का उपयोग किया जाता है। इन विशेषताओं में मूल रूप से दायरा, दृश्यता और जीवन-समय शामिल होता है जो किसी प्रोग्राम के रनटाइम के दौरान किसी विशेष variable के अस्तित्व का पता लगाने में हमारी सहायता करता है।
C में Storage classes का उपयोग जीवनकाल, दृश्यता, स्मृति स्थान और चर के प्रारंभिक मान को निर्धारित करने के लिए किया जाता है। C में चार प्रकार के स्टोरेज क्लासेस हैं
Automatic
External
Static
Register
Automatic variables को रनटाइम पर स्वचालित रूप से स्मृति आवंटित किया जाता है, और automatic variables की दृश्यता उस ब्लॉक तक ही सीमित होती है जिसमें उन्हें परिभाषित किया गया है, automatic variables को डिफ़ॉल्ट रूप से garbage में शुरू किया जाता है। Automatic variables के लिए memory ब्लॉक से बाहर निकलने पर मुक्त हो जाती है। Automatic variables को परिभाषित करने के लिए उपयोग किया जाने वाला कीवर्ड ऑटो होते है. डिफ़ॉल्ट रूप से प्रत्येक स्थानीय चर सी में स्वचालित होता है।
external storage class का उपयोग compiler यह बताने के लिए किया जाता है कि बाहरी रूप में परिभाषित variable को प्रोग्राम में कहीं पर भी बाहरी लिंक के साथ declared किया जा सकता है।
External integral टाइप का डिफ़ॉल्ट initial मान या तो 0 होगा या null होगा।
हम केवल global variable को extern के रूप में प्रारंभ कर सकते हैं, यानी, हम बाहरी variable को किसी भी ब्लॉक या method के भीतर प्रारंभ नहीं कर सकते हैं।
Static specifier के रूप में परिभाषित variable कई फ़ंक्शन कॉल के बीच अपनी value को रख सकते हैं। Static local variables केवल फ़ंक्शन या ब्लॉक में दिखाई देते हैं जिसमें उन्हें परिभाषित किया जाता है।
एक static variable को कई बार घोषित किया जा सकता है लेकिन केवल एक बार असाइन किया जा सकता है।
Registers के रूप में परिभाषित variable को CPU में शेष memory के आकार के आधार पर CPU registers में memory allocate किया जाता है।
हम register variable को कम नहीं कर सकते हैं, यानी, हम ऑपरेटर का use register variable के लिए नहीं कर सकते। Register variables का एक्सेस टाइम automatic variables से बहुत तेज़ होता है।