storage class specifier - wikimedia · 10/5/2017  · storage class specifiers ... c language...

26
Young Won Lim 10/5/17 Storage Class Specifier

Upload: others

Post on 08-Sep-2020

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Storage Class Specifier - Wikimedia · 10/5/2017  · Storage Class Specifiers ... C Language Express, I. K. Chun. Created Date: 10/5/2017 9:54:21 PM

Young Won Lim10/5/17

Storage Class Specifier

Page 2: Storage Class Specifier - Wikimedia · 10/5/2017  · Storage Class Specifiers ... C Language Express, I. K. Chun. Created Date: 10/5/2017 9:54:21 PM

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.

Page 3: Storage Class Specifier - Wikimedia · 10/5/2017  · Storage Class Specifiers ... C Language Express, I. K. Chun. Created Date: 10/5/2017 9:54:21 PM

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.

Page 4: Storage Class Specifier - Wikimedia · 10/5/2017  · Storage Class Specifiers ... C Language Express, I. K. Chun. Created Date: 10/5/2017 9:54:21 PM

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

Page 5: Storage Class Specifier - Wikimedia · 10/5/2017  · Storage Class Specifiers ... C Language Express, I. K. Chun. Created Date: 10/5/2017 9:54:21 PM

Type Specifier & Type Qualifier 5 Young Won Lim

10/5/17

Global Variables

Page 6: Storage Class Specifier - Wikimedia · 10/5/2017  · Storage Class Specifiers ... C Language Express, I. K. Chun. Created Date: 10/5/2017 9:54:21 PM

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/

Page 7: Storage Class Specifier - Wikimedia · 10/5/2017  · Storage Class Specifiers ... C Language Express, I. K. Chun. Created Date: 10/5/2017 9:54:21 PM

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/

Page 8: Storage Class Specifier - Wikimedia · 10/5/2017  · Storage Class Specifiers ... C Language Express, I. K. Chun. Created Date: 10/5/2017 9:54:21 PM

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/

Page 9: Storage Class Specifier - Wikimedia · 10/5/2017  · Storage Class Specifiers ... C Language Express, I. K. Chun. Created Date: 10/5/2017 9:54:21 PM

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/

Page 10: Storage Class Specifier - Wikimedia · 10/5/2017  · Storage Class Specifiers ... C Language Express, I. K. Chun. Created Date: 10/5/2017 9:54:21 PM

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/

Page 11: Storage Class Specifier - Wikimedia · 10/5/2017  · Storage Class Specifiers ... C Language Express, I. K. Chun. Created Date: 10/5/2017 9:54:21 PM

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/

Page 12: Storage Class Specifier - Wikimedia · 10/5/2017  · Storage Class Specifiers ... C Language Express, I. K. Chun. Created Date: 10/5/2017 9:54:21 PM

Type Specifier & Type Qualifier 12 Young Won Lim

10/5/17

Function Definition

Page 13: Storage Class Specifier - Wikimedia · 10/5/2017  · Storage Class Specifiers ... C Language Express, I. K. Chun. Created Date: 10/5/2017 9:54:21 PM

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/

Page 14: Storage Class Specifier - Wikimedia · 10/5/2017  · Storage Class Specifiers ... C Language Express, I. K. Chun. Created Date: 10/5/2017 9:54:21 PM

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

Page 15: Storage Class Specifier - Wikimedia · 10/5/2017  · Storage Class Specifiers ... C Language Express, I. K. Chun. Created Date: 10/5/2017 9:54:21 PM

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

Page 16: Storage Class Specifier - Wikimedia · 10/5/2017  · Storage Class Specifiers ... C Language Express, I. K. Chun. Created Date: 10/5/2017 9:54:21 PM

Type Specifier & Type Qualifier 16 Young Won Lim

10/5/17

Function Definition

Page 17: Storage Class Specifier - Wikimedia · 10/5/2017  · Storage Class Specifiers ... C Language Express, I. K. Chun. Created Date: 10/5/2017 9:54:21 PM

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( );

Page 18: Storage Class Specifier - Wikimedia · 10/5/2017  · Storage Class Specifiers ... C Language Express, I. K. Chun. Created Date: 10/5/2017 9:54:21 PM

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”);}

Page 19: Storage Class Specifier - Wikimedia · 10/5/2017  · Storage Class Specifiers ... C Language Express, I. K. Chun. Created Date: 10/5/2017 9:54:21 PM

Type Specifier & Type Qualifier 19 Young Won Lim

10/5/17

Function Definition

Page 20: Storage Class Specifier - Wikimedia · 10/5/2017  · Storage Class Specifiers ... C Language Express, I. K. Chun. Created Date: 10/5/2017 9:54:21 PM

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/

Page 21: Storage Class Specifier - Wikimedia · 10/5/2017  · Storage Class Specifiers ... C Language Express, I. K. Chun. Created Date: 10/5/2017 9:54:21 PM

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

Page 22: Storage Class Specifier - Wikimedia · 10/5/2017  · Storage Class Specifiers ... C Language Express, I. K. Chun. Created Date: 10/5/2017 9:54:21 PM

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

Page 23: Storage Class Specifier - Wikimedia · 10/5/2017  · Storage Class Specifiers ... C Language Express, I. K. Chun. Created Date: 10/5/2017 9:54:21 PM

Type Specifier & Type Qualifier 23 Young Won Lim

10/5/17

Storage Class Specifiers

● auto● extern ● register● static● typedef●

Page 24: Storage Class Specifier - Wikimedia · 10/5/2017  · Storage Class Specifiers ... C Language Express, I. K. Chun. Created Date: 10/5/2017 9:54:21 PM

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

Page 25: Storage Class Specifier - Wikimedia · 10/5/2017  · Storage Class Specifiers ... C Language Express, I. K. Chun. Created Date: 10/5/2017 9:54:21 PM

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

Page 26: Storage Class Specifier - Wikimedia · 10/5/2017  · Storage Class Specifiers ... C Language Express, I. K. Chun. Created Date: 10/5/2017 9:54:21 PM

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