Storage Class Specifier - Wikimedia · 10/5/2017 · Storage Class Specifiers ... C Language...
Transcript of Storage Class Specifier - Wikimedia · 10/5/2017 · Storage Class Specifiers ... C Language...
Young Won Lim10/5/17
Storage Class Specifier
Young Won Lim10/5/17
Copyright (c) 2010 - 2017 Young W. Lim.
Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License".
Please send corrections (or suggestions) to [email protected].
This document was produced by using OpenOffice.
Type Specifier & Type Qualifier 3 Young Won Lim
10/5/17
Variable Types
Automatic Variablea variable defined inside a function block.invisible outside the function a local variable which is allocated and deallocated automatically when program flow enters and leaves the variable's scope.
External Variable a variable defined outside any function block
Static Variablea variable that has been allocated "statically", meaning that its lifetime (or "extent") is the entire run of the program.
Type Specifier & Type Qualifier 4 Young Won Lim
10/5/17
Global Variables
Variables declared outside any function definitionAccessible to any function defined in the same file
after the global variable is defined
Type Specifier & Type Qualifier 5 Young Won Lim
10/5/17
Global Variables
Type Specifier & Type Qualifier 6 Young Won Lim
10/5/17
Global Variables (A1)
include <stdio.h>
int a;
int main(void) { printf("a=%d\n", a);}
include <stdio.h>
int main(void) { printf("a=%d\n", a);}
int a;
include <stdio.h>
extern int a;
int main(void) { printf("a=%d\n", a);}
include <stdio.h>
int main(void) { printf("a=%d\n", a);}
extern int a;
a=0 undeclared errorundeclared error undefined reference
https://cprogramex.wordpress.com/
Type Specifier & Type Qualifier 7 Young Won Lim
10/5/17
Global Variables (A2)
include <stdio.h>
int a;
int main(void) { printf("a=%d\n", a);}
int a;
include <stdio.h>
int main(void) { printf("a=%d\n", a);}
int a;int a;
include <stdio.h>
extern int a;
int main(void) { printf("a=%d\n", a);}
int a;
include <stdio.h>
int main(void) { printf("a=%d\n", a);}
extern int a;int a;
a=0 undeclared errorundeclared error a=0
https://cprogramex.wordpress.com/
Type Specifier & Type Qualifier 8 Young Won Lim
10/5/17
Global Variables (A3)
include <stdio.h>
int a;
int main(void) { printf("a=%d\n", a);}
int a = 333;
include <stdio.h>
int main(void) { printf("a=%d\n", a);}
int a;int a = 333;
include <stdio.h>
extern int a;
int main(void) { printf("a=%d\n", a);}
int a = 333;
include <stdio.h>
int main(void) { printf("a=%d\n", a);}
extern int a;int a = 333;
a=333 undeclared errorundeclared error a=333
https://cprogramex.wordpress.com/
Type Specifier & Type Qualifier 9 Young Won Lim
10/5/17
Global Variables (B1)
include <stdio.h>
int a = 111;
int main(void) { printf("a=%d\n", a);}
include <stdio.h>
int main(void) { printf("a=%d\n", a);}
int a = 111;
include <stdio.h>
extern int a = 111;
int main(void) { printf("a=%d\n", a);}
include <stdio.h>
int main(void) { printf("a=%d\n", a);}
extern int a = 111;
a= 0 undeclared errorundeclared errorinitialized warninga=111
https://cprogramex.wordpress.com/
Type Specifier & Type Qualifier 10 Young Won Lim
10/5/17
Global Variables (B2)
include <stdio.h>
int a = 111;
int main(void) { printf("a=%d\n", a);}
int a;
include <stdio.h>
int main(void) { printf("a=%d\n", a);}
int a = 111;int a;
include <stdio.h>
extern int a = 111;
int main(void) { printf("a=%d\n", a);}
int a;
include <stdio.h>
int main(void) { printf("a=%d\n", a);}
extern int a = 111;int a;
a=111 undeclared errorinitialized warning
undeclared error initialized warninga=111
https://cprogramex.wordpress.com/
Type Specifier & Type Qualifier 11 Young Won Lim
10/5/17
Global Variables (B3)
include <stdio.h>
int a = 111;
int main(void) { printf("a=%d\n", a);}
int a = 333;
include <stdio.h>
int main(void) { printf("a=%d\n", a);}
int a = 111;int a = 333;
include <stdio.h>
extern int a = 111;
int main(void) { printf("a=%d\n", a);}
int a = 333;
include <stdio.h>
int main(void) { printf("a=%d\n", a);}
extern int a = 111;int a = 333;
redefinition error undeclared errorredefinition errorinitialized warning
undeclared errorredefinition error
redefinition errorinitialized warning
https://cprogramex.wordpress.com/
Type Specifier & Type Qualifier 12 Young Won Lim
10/5/17
Function Definition
Type Specifier & Type Qualifier 13 Young Won Lim
10/5/17
Function Definitions (C1)
include <stdio.h>
void func( );
int main(void) { func();}
include <stdio.h>
int main(void) { func();}
void func( );
include <stdio.h>
extern void func( );
int main(void) { func();}
include <stdio.h>
int main(void) { func();}
extern void func( );
undefined reference function warningundefined reference
function warningundefined reference undefined reference
https://cprogramex.wordpress.com/
Type Specifier & Type Qualifier 14 Young Won Lim
10/5/17
Function Definitions (C2)
include <stdio.h>
void func( );
int main(void) { func();}
void func( );
include <stdio.h>
int main(void) { func();}
void func( );void func( );
include <stdio.h>
extern void func( );
int main(void) { func();}
void func( );
include <stdio.h>
int main(void) { func();}
extern void func( );void func( );
https://cprogramex.wordpress.com/
undefined reference function warningundefined reference
function warningundefined reference undefined reference
Type Specifier & Type Qualifier 15 Young Won Lim
10/5/17
Function Definitions (C3)
include <stdio.h>
void func( );
int main(void) { func();}
void func( ) { printf(“func \n”);}
include <stdio.h>
int main(void) { func();}
void func( );void func( ) { printf(“func \n”);}
include <stdio.h>
extern void func( );
int main(void) { func();}
void func( ) { printf(“func \n”);}
include <stdio.h>
int main(void) { func();}
extern void func( );void func( ) { printf(“func \n”);}
func
https://cprogramex.wordpress.com/
function warningfunc
function warningfunc func
Type Specifier & Type Qualifier 16 Young Won Lim
10/5/17
Function Definition
Type Specifier & Type Qualifier 17 Young Won Lim
10/5/17
Function Definitions (M1)
include <stdio.h>
void func( );
int main(void) { func();}
include <stdio.h>
int main(void) { func();}
void func( );
include <stdio.h>
extern void func( );
int main(void) { func();}
include <stdio.h>
int main(void) { func();}
extern void func( );
undefined reference function warningundefined reference
function warningundefined reference undefined reference
https://cprogramex.wordpress.com/
void func( ); void func( ); void func( );void func( );
Type Specifier & Type Qualifier 18 Young Won Lim
10/5/17
Function Definitions (M2)
include <stdio.h>
void func( );
int main(void) { func();}
include <stdio.h>
int main(void) { func();}
void func( );
include <stdio.h>
extern void func( );
int main(void) { func();}
include <stdio.h>
int main(void) { func();}
extern void func( );
undefined reference function warningundefined reference
function warningundefined reference undefined reference
https://cprogramex.wordpress.com/
void func( ) { printf(“func \n”);}
void func( ) { printf(“func \n”);}
void func( ) { printf(“func \n”);}
void func( ) { printf(“func \n”);}
Type Specifier & Type Qualifier 19 Young Won Lim
10/5/17
Function Definition
Type Specifier & Type Qualifier 20 Young Won Lim
10/5/17
Function Definitions (D1)
include <stdio.h>
void func( ) { printf(“func \n”);}
int main(void) { func();}
include <stdio.h>
int main(void) { func();}
void func( ) { printf(“func \n”);}
include <stdio.h>
extern void func( ) { printf(“func \n”);}
int main(void) { func();}
include <stdio.h>
int main(void) { func();}
extern void func( ) { printf(“func \n”);}
func calledfunction warningfunc called
function warningfunc called
func called
https://cprogramex.wordpress.com/
Type Specifier & Type Qualifier 21 Young Won Lim
10/5/17
Function Definitions (D2)
include <stdio.h>
void func( ) { printf(“func \n”);}
int main(void) { func();}
void func( );
include <stdio.h>
int main(void) { func();}
void func( ) { printf(“func \n”);}void func( );
include <stdio.h>
extern void func( ) { printf(“func \n”);}
int main(void) { func();}
void func( );
include <stdio.h>
int main(void) { func();}
extern void func( ) { printf(“func \n”);}void func( );
https://cprogramex.wordpress.com/
func called function warningfunc called
function warningfunc called func called
Type Specifier & Type Qualifier 22 Young Won Lim
10/5/17
Function Definitions (D3)
include <stdio.h>
void func( ) { printf(“func \n”);}
int main(void) { func();}
void func( ) { printf(“func \n”);}
include <stdio.h>
int main(void) { func();}
void func( ) { printf(“func \n”);}void func( ) { printf(“func \n”);}
include <stdio.h>
extern void func( ) { printf(“func \n”);}
int main(void) { func();}
void func( ) { printf(“func \n”);}
include <stdio.h>
int main(void) { func();}
extern void func( ) { printf(“func \n”);}void func( ) { printf(“func \n”);}
redefinition error
https://cprogramex.wordpress.com/
function warningredefinition error
function warningredefinition error
redefinition error
Type Specifier & Type Qualifier 23 Young Won Lim
10/5/17
Storage Class Specifiers
● auto● extern ● register● static● typedef●
Type Specifier & Type Qualifier 24 Young Won Lim
10/5/17
Storage Duration
Functions Global Variables Local Variables
static storage static storage static storagestatic
static storage static storage static storageextern
static storage static storage auto storageno specifier
Type Specifier & Type Qualifier 25 Young Won Lim
10/5/17
Linkage
Functions Global Variables Local Variables
internal linkage internal linkagestatic
external linkage external linkageextern
external linkage external linkageno specifier
Young Won Lim10/5/17
References
[1] Essential C, Nick Parlante[2] Efficient C Programming, Mark A. Weiss[3] C A Reference Manual, Samuel P. Harbison & Guy L. Steele Jr.[4] C Language Express, I. K. Chun