chapter 4 functions and program structure speaker: lung-sheng chien
Post on 15-Jan-2016
226 views
TRANSCRIPT
![Page 1: Chapter 4 functions and program structure Speaker: Lung-Sheng Chien](https://reader035.vdocuments.net/reader035/viewer/2022062221/56649d415503460f94a1b731/html5/thumbnails/1.jpg)
Chapter 4 functions and program structure
Speaker: Lung-Sheng Chien
![Page 2: Chapter 4 functions and program structure Speaker: Lung-Sheng Chien](https://reader035.vdocuments.net/reader035/viewer/2022062221/56649d415503460f94a1b731/html5/thumbnails/2.jpg)
OutLine
• Example: grep - organization of program structure- compilation process
• Precedence and Associativity
• External/Internal objects
• Scope and Lifetime
• Preprocessor ( 前處理器 )
![Page 3: Chapter 4 functions and program structure Speaker: Lung-Sheng Chien](https://reader035.vdocuments.net/reader035/viewer/2022062221/56649d415503460f94a1b731/html5/thumbnails/3.jpg)
Ah Love! could you and I with Fate conspire
To grasp this sorry Scheme of Things entire,
Would not we shatter it to bite -- and then
Re-mould it nearer to the Heart’s Desire!
Ah Love! could you and I with Fate conspire
Would not we shatter it to bite -- and then
Re-mould it nearer to the Heart’s Desire!
Search for the pattern “ould”
grep – print lines matching a pattern
![Page 4: Chapter 4 functions and program structure Speaker: Lung-Sheng Chien](https://reader035.vdocuments.net/reader035/viewer/2022062221/56649d415503460f94a1b731/html5/thumbnails/4.jpg)
while ( there is another line)
if ( the line contains the pattern ) then
print it
endif
endwhile
Pseudocode Function getline
Function strindex
Function printf
File getline.cpp File strindex.cpp
Structure of the program
File main.cpp
function getline function strindex function main (driver)
call
![Page 5: Chapter 4 functions and program structure Speaker: Lung-Sheng Chien](https://reader035.vdocuments.net/reader035/viewer/2022062221/56649d415503460f94a1b731/html5/thumbnails/5.jpg)
1. project grep
2. source file getline.cpp
grep project – getline function [1]
Project Add to Project New
![Page 6: Chapter 4 functions and program structure Speaker: Lung-Sheng Chien](https://reader035.vdocuments.net/reader035/viewer/2022062221/56649d415503460f94a1b731/html5/thumbnails/6.jpg)
1. Source file getline.cpp
grep project – getline function [2]
Question 1: why we need input parameter lim?
Question 2: what is execution order in predicate of while-loop?
Q1
Q2
definition of getline
![Page 7: Chapter 4 functions and program structure Speaker: Lung-Sheng Chien](https://reader035.vdocuments.net/reader035/viewer/2022062221/56649d415503460f94a1b731/html5/thumbnails/7.jpg)
1. project grep
2. source file strindex.cpp
grep project – strindex function [1]
Project Add to Project New
![Page 8: Chapter 4 functions and program structure Speaker: Lung-Sheng Chien](https://reader035.vdocuments.net/reader035/viewer/2022062221/56649d415503460f94a1b731/html5/thumbnails/8.jpg)
grep project – strindex function [2]
source file strindex.cpp
Question: what is procedure of function strindex ?
definition of strindex
![Page 9: Chapter 4 functions and program structure Speaker: Lung-Sheng Chien](https://reader035.vdocuments.net/reader035/viewer/2022062221/56649d415503460f94a1b731/html5/thumbnails/9.jpg)
1. project grep
2. source file main.cpp
grep project – main function [1]
Project Add to Project New
![Page 10: Chapter 4 functions and program structure Speaker: Lung-Sheng Chien](https://reader035.vdocuments.net/reader035/viewer/2022062221/56649d415503460f94a1b731/html5/thumbnails/10.jpg)
source file main.cpp
remember to add new line character
grep project – main function [2]
Question: who does function main return found to ?
declaration, not definition
![Page 11: Chapter 4 functions and program structure Speaker: Lung-Sheng Chien](https://reader035.vdocuments.net/reader035/viewer/2022062221/56649d415503460f94a1b731/html5/thumbnails/11.jpg)
Ah Love! could you and I with Fate conspire
To grasp this sorry Scheme of Things entire,
Would not we shatter it to bite -- and then
Re-mould it nearer to the Heart’s Desire!
article.txt
1. compile 3 source files
2. feed article.txt into a.out
grep project – in Linux machine
Upload project grep by sftp first
3. 上一個指令的傳回值
![Page 12: Chapter 4 functions and program structure Speaker: Lung-Sheng Chien](https://reader035.vdocuments.net/reader035/viewer/2022062221/56649d415503460f94a1b731/html5/thumbnails/12.jpg)
1. pattern
2. File
“grep” is embedded in Linux machine
Search manual of grep
![Page 13: Chapter 4 functions and program structure Speaker: Lung-Sheng Chien](https://reader035.vdocuments.net/reader035/viewer/2022062221/56649d415503460f94a1b731/html5/thumbnails/13.jpg)
return-type function-name ( argument declarations)
{
declarations and statements
}
Function definition
白話文
文言文 (grammar, page 234, 235)
function-definition:declaraction-specifiers(opt) declarator declaraction-list(opt) compound-statement
declaration-specifier:storage-class-specifier declaration-specifier(opt)type-specifier declaration-specifier(opt)type-qualifier declaration-specifier(opt)
declarator:pointer(opt) direct-declarator
direct-declarator:Identifierdirect-declarator( parameter-type-list )
![Page 14: Chapter 4 functions and program structure Speaker: Lung-Sheng Chien](https://reader035.vdocuments.net/reader035/viewer/2022062221/56649d415503460f94a1b731/html5/thumbnails/14.jpg)
declaraction-specifiers declarator compound-statement
type-specifiers
definition of main function [1]
![Page 15: Chapter 4 functions and program structure Speaker: Lung-Sheng Chien](https://reader035.vdocuments.net/reader035/viewer/2022062221/56649d415503460f94a1b731/html5/thumbnails/15.jpg)
compound-statement:{ declaration-list statement-list }
declarator:Pointer(opt) direct-declarator
direct-declarator:direct-declarator ( parameter-type-list )
Identifier
definition of main function [2]
![Page 16: Chapter 4 functions and program structure Speaker: Lung-Sheng Chien](https://reader035.vdocuments.net/reader035/viewer/2022062221/56649d415503460f94a1b731/html5/thumbnails/16.jpg)
Why we need declaration of getline and strindex in main.cpp
Compiler 是逐個檔案作編譯 , 當他讀 main.cpp 且看見
getline(line, MAXLINE) 時需作 type checking, 可是 getline 的 defintion 是在 getline.cpp 內 , 並不在 main.cpp, 所以我們需在 call getline 之前宣告 getline 的原型 ,
注意 : compiler 只讀檔一次 , 所以必需在 compiler 作 type checking 之前就告訴他函數的原型
![Page 17: Chapter 4 functions and program structure Speaker: Lung-Sheng Chien](https://reader035.vdocuments.net/reader035/viewer/2022062221/56649d415503460f94a1b731/html5/thumbnails/17.jpg)
秀出編譯過程
先編譯 main.cpp
c++ 編譯器
編譯為組合語言
GNU assembler 翻譯組語成 object code, ccEg6xsf.o 檔
編譯順序 -- [1] main.cpp
![Page 18: Chapter 4 functions and program structure Speaker: Lung-Sheng Chien](https://reader035.vdocuments.net/reader035/viewer/2022062221/56649d415503460f94a1b731/html5/thumbnails/18.jpg)
再編譯 getline.cpp
編譯為組合語言
c++ 編譯器
翻譯組語成 object code, ccnNjsxn.o 檔
編譯順序 -- [2] getline.cpp
![Page 19: Chapter 4 functions and program structure Speaker: Lung-Sheng Chien](https://reader035.vdocuments.net/reader035/viewer/2022062221/56649d415503460f94a1b731/html5/thumbnails/19.jpg)
c++ 編譯器
最後編譯 strindex.cpp
編譯為組合語言
翻譯組語成 object code, ccQJUtuu.o 檔
編譯順序 -- [3] strindex.cpp
![Page 20: Chapter 4 functions and program structure Speaker: Lung-Sheng Chien](https://reader035.vdocuments.net/reader035/viewer/2022062221/56649d415503460f94a1b731/html5/thumbnails/20.jpg)
main.cpp getline.cpp strindex.cpp
Collect2 被作為 ld (GNU linker 連接器 )
連接程序 – linking process
Compiler
g++ / icpc
Assembler
as
Linker
collect2 / ld
Source code
Assembly code .s file
object code .o file
Executable file a.out
![Page 21: Chapter 4 functions and program structure Speaker: Lung-Sheng Chien](https://reader035.vdocuments.net/reader035/viewer/2022062221/56649d415503460f94a1b731/html5/thumbnails/21.jpg)
OutLine
• Example: grep
• Precedence and Associativity
• External/Internal objects
• Scope and Lifetime
• Preprocessor ( 前處理器 )
![Page 22: Chapter 4 functions and program structure Speaker: Lung-Sheng Chien](https://reader035.vdocuments.net/reader035/viewer/2022062221/56649d415503460f94a1b731/html5/thumbnails/22.jpg)
Question 2: what is execution order in
predicate of while-loop?
Q2
Execution order
Precedence and Associativity of operators [1]
![Page 23: Chapter 4 functions and program structure Speaker: Lung-Sheng Chien](https://reader035.vdocuments.net/reader035/viewer/2022062221/56649d415503460f94a1b731/html5/thumbnails/23.jpg)
Precedence and Associativity of operators, page 53 [2]
arithmetic, 先乘除後加減
relational
logical
Precedence : () > arithmetic > relational > logical > assignment
assignment
![Page 24: Chapter 4 functions and program structure Speaker: Lung-Sheng Chien](https://reader035.vdocuments.net/reader035/viewer/2022062221/56649d415503460f94a1b731/html5/thumbnails/24.jpg)
-- is higher than > () is higher
than !=
> is higher than &&
!= is higher than &&
!= is higher than &&
associativity of &&
is left to right
Parsing tree of
Execution order
1. bottom-up
2. Left subtree right subtree
![Page 25: Chapter 4 functions and program structure Speaker: Lung-Sheng Chien](https://reader035.vdocuments.net/reader035/viewer/2022062221/56649d415503460f94a1b731/html5/thumbnails/25.jpg)
用括號表示優先次序
Three equivalent coding style
c is well-defined
![Page 26: Chapter 4 functions and program structure Speaker: Lung-Sheng Chien](https://reader035.vdocuments.net/reader035/viewer/2022062221/56649d415503460f94a1b731/html5/thumbnails/26.jpg)
Question: what’s procedure of function strindex ?
Given pattern string
for each position of string
check if substring :
endfor
if found, then return starting index of matched string in
otherwise, return 1
t
i s
s i i strlen t t
s
![Page 27: Chapter 4 functions and program structure Speaker: Lung-Sheng Chien](https://reader035.vdocuments.net/reader035/viewer/2022062221/56649d415503460f94a1b731/html5/thumbnails/27.jpg)
OutLine
• Example: grep
• Precedence and Associativity
• External/Internal objects
• Scope and Lifetime
• Preprocessor ( 前處理器 )
![Page 28: Chapter 4 functions and program structure Speaker: Lung-Sheng Chien](https://reader035.vdocuments.net/reader035/viewer/2022062221/56649d415503460f94a1b731/html5/thumbnails/28.jpg)
External/internal objects [1]
• External objects- external variable (global variable): defined outside any function- functions
• Internal objects- variables inside function without declaring static- parameters of a function
translation-unit: external-declaration translation-unit external-declaration
external-declaration: function-definition declaration
declaration:declaration-sepcifiers init-declarator-list(opt)
Grammar in page 234
![Page 29: Chapter 4 functions and program structure Speaker: Lung-Sheng Chien](https://reader035.vdocuments.net/reader035/viewer/2022062221/56649d415503460f94a1b731/html5/thumbnails/29.jpg)
External variable’s
definition
External object:
function main
Local variables
file main.cpp
External/internal objects [2]
![Page 30: Chapter 4 functions and program structure Speaker: Lung-Sheng Chien](https://reader035.vdocuments.net/reader035/viewer/2022062221/56649d415503460f94a1b731/html5/thumbnails/30.jpg)
Local variables
Local variables
file getline.cpp
file strindex.cpp
External object:
function getline
External object:
function strindex
![Page 31: Chapter 4 functions and program structure Speaker: Lung-Sheng Chien](https://reader035.vdocuments.net/reader035/viewer/2022062221/56649d415503460f94a1b731/html5/thumbnails/31.jpg)
OutLine
• Example: grep
• Precedence and Associativity
• External/Internal objects
• Scope and Lifetime
• Preprocessor ( 前處理器 )
![Page 32: Chapter 4 functions and program structure Speaker: Lung-Sheng Chien](https://reader035.vdocuments.net/reader035/viewer/2022062221/56649d415503460f94a1b731/html5/thumbnails/32.jpg)
Scope and visibility
• The scope of a name is the part of the program within which the name can be used.
• For automatic variable (automatic storage) declared at the beginning of a function, the scope is the function in which the name is declared.
• Local variables of the same name in different functions are unrelated. The same is true of the parameters of the function, which are local variables also.
• The scope of an external variable or a function lasts from the point at which it is declared to the end of the file being compiled.
• External variable in file1 can be accessed by functions in file2 if it is declared by keyword extern in file2.
• static external variable is encapsulated inside a file1, no other functions of file2 can access it.
![Page 33: Chapter 4 functions and program structure Speaker: Lung-Sheng Chien](https://reader035.vdocuments.net/reader035/viewer/2022062221/56649d415503460f94a1b731/html5/thumbnails/33.jpg)
Scope graph
block scope
Level 0
Level 1
Level 2
![Page 34: Chapter 4 functions and program structure Speaker: Lung-Sheng Chien](https://reader035.vdocuments.net/reader035/viewer/2022062221/56649d415503460f94a1b731/html5/thumbnails/34.jpg)
Lifetime ( 生命周期 ) [1]
• “Lifetime” is the period during execution of a program in which a variable or function exists. The storage duration of the identifier determines its lifetime.
• Identifiers with static storage duration (global lifetime) are alive during (main) program execution and die when program terminates.Example: global variable, static variable
• Identifiers, which are defined inside a function, with automatic storage duration (local lifetime) is allocated new storage each time the function is called and die when function returns.Example: local variable, function parameter
• Although an identifier with a global lifetime exists throughout the execution of the program, it may not be visible in all parts of the program.
![Page 35: Chapter 4 functions and program structure Speaker: Lung-Sheng Chien](https://reader035.vdocuments.net/reader035/viewer/2022062221/56649d415503460f94a1b731/html5/thumbnails/35.jpg)
Lifetime ( 生命周期 ) [2]
![Page 36: Chapter 4 functions and program structure Speaker: Lung-Sheng Chien](https://reader035.vdocuments.net/reader035/viewer/2022062221/56649d415503460f94a1b731/html5/thumbnails/36.jpg)
extern and static [1]
• A variable declared with the extern storage-class specifier is a reference to a variable with the same name defined at the external level in any of the source files ofthe program.
• The internal extern declaration is used to make the external-level variable definition visible within the block.
• Unless otherwise declared at the external level, a variable declared with the extern keyword is visible only in the block in which it is declared.
MSDN Library: search “extern”
global variable
![Page 37: Chapter 4 functions and program structure Speaker: Lung-Sheng Chien](https://reader035.vdocuments.net/reader035/viewer/2022062221/56649d415503460f94a1b731/html5/thumbnails/37.jpg)
file main.cpp
file strindex.cppdeclaration
definition
extern and static [2]
![Page 38: Chapter 4 functions and program structure Speaker: Lung-Sheng Chien](https://reader035.vdocuments.net/reader035/viewer/2022062221/56649d415503460f94a1b731/html5/thumbnails/38.jpg)
OutLine
• Example: grep
• Precedence and Associativity
• External/Internal objects
• Scope and Lifetime
• Preprocessor ( 前處理器 )
![Page 39: Chapter 4 functions and program structure Speaker: Lung-Sheng Chien](https://reader035.vdocuments.net/reader035/viewer/2022062221/56649d415503460f94a1b731/html5/thumbnails/39.jpg)
C ProProcessor (cpp) [1]
• File inclusion#include “filename”#include <filename>
• Macro ( 巨集 ) substitution#define forever for ( ; ; ) // infinite loop#define square(x) (x)*(x)
• Conditional inclusion#ifndef _INC_STDIO#define _INC_STDIO /* content of stdio.h */#endif /* _INC_STDIO */
![Page 40: Chapter 4 functions and program structure Speaker: Lung-Sheng Chien](https://reader035.vdocuments.net/reader035/viewer/2022062221/56649d415503460f94a1b731/html5/thumbnails/40.jpg)
Compiler
g++ / icpc
Assembler
as
Linker
collect2 / ld
Source code
Assembly code .s file
object code
.o file
Executable file a.out
C preprocessor
cpp
C PreProcessor (cpp) [2]
![Page 41: Chapter 4 functions and program structure Speaker: Lung-Sheng Chien](https://reader035.vdocuments.net/reader035/viewer/2022062221/56649d415503460f94a1b731/html5/thumbnails/41.jpg)
CPP – macro substitution
Question: Why no max operation in math.h
cpp handles this but the compiler don’t see this statement
![Page 42: Chapter 4 functions and program structure Speaker: Lung-Sheng Chien](https://reader035.vdocuments.net/reader035/viewer/2022062221/56649d415503460f94a1b731/html5/thumbnails/42.jpg)
輸出至檔案 main_cpp.txt
讀檔案 main_cpp.txt 一次一頁
cpp 將替換 HELLO_STRING
cpp 會複製 stdio.h 到此檔案以便 compiler 作 type checking
CPP - #include “filename” [1]
![Page 43: Chapter 4 functions and program structure Speaker: Lung-Sheng Chien](https://reader035.vdocuments.net/reader035/viewer/2022062221/56649d415503460f94a1b731/html5/thumbnails/43.jpg)
line 28, include feature.h
CPP - #include “filename” [2]
Recursively file inclusion, 需滿足因果律
按空白鍵接下一頁
![Page 44: Chapter 4 functions and program structure Speaker: Lung-Sheng Chien](https://reader035.vdocuments.net/reader035/viewer/2022062221/56649d415503460f94a1b731/html5/thumbnails/44.jpg)
CPP - #include “filename” [3]
standard input
standard output
![Page 45: Chapter 4 functions and program structure Speaker: Lung-Sheng Chien](https://reader035.vdocuments.net/reader035/viewer/2022062221/56649d415503460f94a1b731/html5/thumbnails/45.jpg)
Result in Visual Studio
Result in Linux
如果巨集 _WIN32 或巨集 __WIN32__ 有定義 , 則執行程式碼
printf("This is Win32 Application\n");
否則執行程式碼
printf("This is Linux Application\n");
CPP – conditional inclusion [1]
![Page 46: Chapter 4 functions and program structure Speaker: Lung-Sheng Chien](https://reader035.vdocuments.net/reader035/viewer/2022062221/56649d415503460f94a1b731/html5/thumbnails/46.jpg)
CPP – conditional inclusion [2]
Macro _WIN32 is always defined in Visual Studio
![Page 47: Chapter 4 functions and program structure Speaker: Lung-Sheng Chien](https://reader035.vdocuments.net/reader035/viewer/2022062221/56649d415503460f94a1b731/html5/thumbnails/47.jpg)
add header file getline.h
content of getline.h
CPP – causality ( 因果律 ) [1]
![Page 48: Chapter 4 functions and program structure Speaker: Lung-Sheng Chien](https://reader035.vdocuments.net/reader035/viewer/2022062221/56649d415503460f94a1b731/html5/thumbnails/48.jpg)
content of strindex.h
add header file strindex.h
CPP – causality ( 因果律 ) [2]
![Page 49: Chapter 4 functions and program structure Speaker: Lung-Sheng Chien](https://reader035.vdocuments.net/reader035/viewer/2022062221/56649d415503460f94a1b731/html5/thumbnails/49.jpg)
Question 1: why we have infinite recursion?
Question 2: How to solve infinite recursion?
CPP – causality ( 因果律 ) [3]
![Page 50: Chapter 4 functions and program structure Speaker: Lung-Sheng Chien](https://reader035.vdocuments.net/reader035/viewer/2022062221/56649d415503460f94a1b731/html5/thumbnails/50.jpg)
strindex.hgetline.h
getline.cpp strindex.cpp
CPP – causality ( 因果律 ) [4]
![Page 51: Chapter 4 functions and program structure Speaker: Lung-Sheng Chien](https://reader035.vdocuments.net/reader035/viewer/2022062221/56649d415503460f94a1b731/html5/thumbnails/51.jpg)
1. no macro STRINDEX_H is defined
2. define STRINDEX_H
3. include header file getline.h
6
1
2
34 4. no macro GETLINE_H is defined
55. define GETLINE_H
9
7
7. STRINDEX_H is defined, ignore these codes
8
CPP – causality ( 因果律 ) [5]preprocess source strindex.cpp