ImageVerifierCode 换一换
格式:PPT , 页数:44 ,大小:1.41MB ,
资源ID:379697      下载积分:2000 积分
快捷下载
登录下载
邮箱/手机:
温馨提示:
如需开发票,请勿充值!快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝扫码支付 微信扫码支付   
注意:如需开发票,请勿充值!
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【http://www.mydoc123.com/d-379697.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Chapter 27The C Programming Language.ppt)为本站会员(terrorscript155)主动上传,麦多课文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知麦多课文库(发送邮件至master@mydoc123.com或直接QQ联系客服),我们立即给予删除!

Chapter 27The C Programming Language.ppt

1、Chapter 27 The C Programming Language,Bjarne S M. Ritchie,Abstract,This lecture gives you the briefest introduction to C from a C+ point of view. If you need to use this language, read an introductory book (e.g. K&R). This lecture gives you a hint what to look for. C is C+s closest relative, and com

2、patible in many areas, so much of your C+ knowledge carries over.,2,Stroustrup/PPP - Dec13,Overview,C and C+ Function prototypes printf()/scanf() Arrays and strings Memory management Macros const C/C+ interoperability ABIs An example,3,Stroustrup/PPP - Dec13,C and C+,Both were “born” in the Computer

3、 Science Research Department of Bell Labs in Murray Hill, NJ,4,dmr ken bwk bs doug ,Stroustrup/PPP - Dec13,Modern C and C+ are siblings,Stroustrup/PPP - Dec13,5,C+11,C11,C+14,C and C+,In this talk, I use “C” to mean “ISO C89” Thats by far the most commonly used definition of C Classic C has mostly b

4、een replaced (though amazingly not completely) C99 is not yet widely used, C11 may be catching on Source compatibility C is (almost) a subset of C+ Example of exception: int f(int new, int class, int bool); /* ok in C */ (Almost) all constructs that are both C and C+ have the same meaning (semantics

5、) in both languages Example of exception: sizeof(a) /* 4 in C and 1 in C+ */ Link compatibility C and C+ program fragments can be linked together in a single program And very often are C+ was designed to be “as close as possible to C, but no closer” For ease of transition For co-existence Most incom

6、patibilities are related to C+s stricter type checking,6,Stroustrup/PPP - Dec13,C and C+,Both defined/controlled by ISO standards committees Separate committees Unfortunately, leading to incompatibilities Many supported implementations in use Available on more platforms than any other languages Both

7、 primarily aimed at and are heavily used for hard system programming tasks, such as Operating systems kernels Device drivers Embedded systems Compilers Communications systems,7,Stroustrup/PPP - Dec13,C and C+,C is arguably the most successful programming language of all time But how would you decide

8、? Number of programs written Importance of programs written Number of programmers Longevity Influence on other languages Benefits/development_cost Alternatives Fortran Cobol Lisp C+ Java PHP Python ,8,Stroustrup/PPP - Dec13,C and C+,Here we assume you know C+ and how to use it describe the differenc

9、es between C and C+ describe how to program using the facilities offered by C Our ideal of programming and our techniques remain the same, but the tool available to express our ideas change describe a few C “traps and pitfalls” Dont go into all the details from the book Compatibility details are imp

10、ortant, but rarely interesting,Stroustrup/PPP - Dec13,9,C and C+,C+ is a general-purpose programming language with a bias towards systems programming that is a better C supports data abstraction supports object-oriented programming supports generic programming,10,Stroustrup/PPP - Dec13,C: Functions

11、and structs Machine model (basic types and operations) Compilation and linkage model,C and C+,In C, borrowed from C+ Function prototypes (declaration and checking of function arguments) Function declaration notation: void f(int x, double y); / comments const (imperfectly) inline (imperfectly) Initia

12、lizers in for loops: for (int i = 0; /* */ Declarations after statements complex (sort of) bool (sort of) Ban on “implicit int”: int a; f() return 2; I have never seen a program that could be written better in C than in C+ I dont think such a program could exist,Stroustrup/PPP - Dec13,11,Missing in

13、C (from a C+ perspective),Classes and member functions Use struct and global functions Derived classes and virtual functions Use struct, global functions, and pointers to functions You can do OOP in C, but not cleanly, and why would you want to? You can do GP in C, but why would you want to? Templat

14、es and inline functions Use macros Exceptions Use error-codes, error-return values, etc. Function overloading Give each function a separate name new/delete Use malloc()/free() References Use pointers const in constant expressions Use macros,12,Stroustrup/PPP - Dec13,Missing in C (from a C+ perspecti

15、ve),With no classes, templates, and exceptions, C cant provide most C+ standard library facilities Containers vector, map, set, string, etc. Use arrays and pointers Use macros (rather than parameterization with types) STL algorithms sort(), find(), copy(), Not many alternatives use qsort() where you

16、 can Write your own, use 3rd party libraries I/O streams Use stdio: printf(), getch(), etc. Regular expression Use a 3rd party library,13,Stroustrup/PPP - Dec13,C and C+,Lots of useful code is written in C Very few language features are essential In principle, you dont need a high-level language, yo

17、u could write everything in assembler (but why would you want to do that?) Emulate high-level programming techniques As directly supported by C+ but not C Write in the C subset of C+ Compile in both languages to ensure consistency Use high compiler warning levels to catch type errors Use “lint” for

18、large programs A “lint” is a consistency checking program C and C+ are equally efficient If you think you see a difference, suspect differences in default optimizer or linker settings,Stroustrup/PPP - Dec13,14,Functions,There can be only one function of a given name Function argument type checking i

19、s optional Use a compiler option that makes it compulsory There are no references (and therefore no pass-by-reference) pass a pointer There are no member functions There is an alternative function definition syntax,Stroustrup/PPP - Dec13,15,Function prototypes (function argument checking is optional

20、),/* avoid these mistakes use a compiler option that enforces C+ rules */int g(int); /* prototype like C+ function declaration */ int h(); /* not a prototype the argument types are unspecified */int f(p,b) char* p; char b; /* old-style definition not a prototype */ /* */ int my_fct(int a, double d,

21、char* p) /* new-style definition a prototype */ f(); /* ok by the compiler! But gives wrong/unexpected results */f(d,p); /* ok by the compiler! But gives wrong/unexpected results */h(d); /* ok by the compiler! But may give wrong/unexpected results */ff(d); /* ok by the compiler! But may give wrong/u

22、nexpected results */g(p); /* error: wrong type */g(); /* error: argument missing */ ,16,Stroustrup/PPP - Dec13,printf() many peoples favorite C function,/* no iostreams use stdio */#include /* defines int printf(const char* format, ); */int main(void) printf(“Hello, worldn“);return 0; void f(double

23、d, char* s, int i, char ch) printf(“double %g string %s int %i char %cn“, d, s, i, ch);printf(“goof %sn“, i); /* uncaught error */ ,17,Format strings,Formatting characters,Arguments to be formatted,Format string,Stroustrup/PPP - Dec13,scanf() and friends,/* the most popular input functions from : */

24、 int i = getchar(); /* note int, not char;getchar() returns EOF when it reaches end of file */ char* q = gets(p); /* read n terminated line into char array pointed to by p */* sets q to p if read succeeds; sets q to NULL if read fails */void f(int* pi, char* pc, double* pd, char* ps) /* read into va

25、riables whose addresses are passed as pointers: */scanf(“%i %c %g %s“, pi, pc, pd, ps);/* %s skips initial whitespace and is terminated by whitespace */ int i; char c; double d; char s100; f( /* call to assign to i, c, d, and s */Dont ever use gets() or scanf(“%s“)! Consider them poisoned They are t

26、he source of many security violations An overflow is easily arranged and easily exploitable Use getchar(),18,Stroustrup/PPP - Dec13,printf() and scanf() are not type safe,double d = 0; int s = 0; printf(“d: %d , s: %sn“, d, s); /* compiles and runs */* the result might surprise you */,19,“d” for “de

27、cimal”, not “double” (use “g” for double),“s” for “string”,Stroustrup/PPP - Dec13,Though error-prone, printf() is convenient for built-in types printf() formats are not extensible to user-defined types E.g. no %M for My_type values Beware: a printf () with a user-supplied format string is a cracker

28、tool,Arrays and pointers,Defined almost exactly as in C+ In C, you have to use them essentially all the time because there is no vector, map, string, etc. Remember An array doesnt know how long it is it “decays” to a pointer There is no array assignment use memcpy() A C-style string is a zero-termin

29、ated array of char,20,Stroustrup/PPP - Dec13,C-style strings,In C a string (called a C-string or a C-style string in C+ literature) is a zero-terminated array of characters char* p = “asdf“; char s = “asdf“;,21,a,s,f,d,0,p:,a,s,f,d,0,s:,Stroustrup/PPP - Dec13,C-style strings,Comparing strings #inclu

30、de if (s1 = = s2) /* do s1 and s2 point to the same array? */* (typically not what you want) */ if (strcmp(s1,s2) = = 0) /* do s1 and s2 hold the same characters? */ Finding the length of a string int lgt = strlen(s); /* note: goes through the string at run time */* looking for the terminating 0 */

31、Copying strings strcpy(s1,s2); /* copy characters from s2 into s1 */* be sure that s1 can hold that many characters */* and/or use strncpy */,22,Stroustrup/PPP - Dec13,C-style strings,The string copy function strcpy() is the archetypical C function (found in the ISO C standard library) Unless you un

32、derstand the implementation below, dont claim to understand C:char* strcpy(char *p, const char *q) while (*p+ = *q+);return p; For an explanation see for example K&R or TC+PL4,Stroustrup/PPP - Dec13,23,Standard function libraries, printf(), scanf(), etc.strcmp(), etc.isspace(), etc.malloc(), etc.sqr

33、t(), etc.Warning: By default, Microsoft tries to force you to use safer, but non-standard, alternatives to the unsafe C standard library functions,24,Stroustrup/PPP - Dec13,Free store: malloc()/free(),#include void f(int n) /* malloc() takes a number of bytes as its argument */int* p = (int*)malloc(

34、sizeof(int)*n); /* allocate an array of n ints */* */free(p); /* free() returns memory allocated by malloc() to free store */ ,25,Stroustrup/PPP - Dec13,Free store: malloc()/free(),Little compile-time checking /* malloc() returns a void*. You can leave out the cast of malloc(), but dont */ double* p

35、 = malloc(sizeof(int)*n); /* probably a bug */ Little run-time checking int* q = malloc(sizeof(int)*m); /* m ints */ for (int i=0; in; +i) init(qi); /* initialize ints (Eh?) */ No initialization/cleanup malloc() doesnt call constructors free() doesnt call destructors Write and remember to use your o

36、wn init() and cleanup() There is no way to ensure automatic cleanup Dont use malloc()/free() in C+ programs new/delete are as fast and almost always better,26,Stroustrup/PPP - Dec13,Uncast malloc(),The major C/C+ incompatibility in real-world code Not-type safe Historically a pre-standard C compatib

37、ility hack/feature Always controversial Unnecessarily so IMOvoid* malloc(size_t x); /* allocate x bytes */*in C, but not in C+, void* converts to any T* */ void f (int n) int* p = malloc(n*sizeof(int); /* ok in C; error in C+ */int* q = (int*)malloc(n*sizeof(int); /* ok in C and C+ */* */ ,Stroustru

38、p/PPP - Dec13,27,void*,Why does void* convert to T* in C but not in C+? C needs it to save you from casting the result of malloc() C+ does not: use new Why is a void* to T* conversion not type safe? void f()char i = 0;char j = 0;char* p = /* overwrite memory starting at &i */,Stroustrup/PPP - Dec13,

39、28,/ Comments,introduced by Bjarne Stroustrup into C+ from Cs ancestor BCPL when he got really fed up with typing /* */ comments are accepted by most C dialects including the C99 and C11,29,Stroustrup/PPP - Dec13,const,/ in C, a const is never a compile time constant const int max = 30; const int x;

40、 / const not initialized: ok in C (error in C+)void f(int v) int a1max; / error: array bound not a constant (max is not a constant!)int a2x; / error: array bound not a constant (here you see why)switch (v) case 1:/ case max: / error: case label not a constant/ ,30,Stroustrup/PPP - Dec13,Instead of c

41、onst use macros,#define max 30void f(int v) int a1max; / okswitch (v) case 1:/ case max: / ok/ ,31,Stroustrup/PPP - Dec13,Beware of macros,#include “my_header.h“ / int max(int a, int b) return a=b?a:b; / error: “obscure error message”As it happened my_header.h contained the macro max from the previo

42、us slide so what the compiler saw wasint 30(int a, int b) return a=b?a:b; No wonder it complained! There are tens of thousands of macros in popular header files. Always define macros with ALL_CAPS names, e.g.#define MY_MAX 30 Never give anything but a macro an ALL_CAPS name Unfortunately, not everyo

43、ne obeys the ALL_CAPS convention,32,Stroustrup/PPP - Dec13,C/C+ interoperability,Works because of shared linkage model Works because a shared model for simple objects built-in types and structs/classes Optimal/Efficient No behind-the-scenes reformatting/conversions,Stroustrup/PPP - Dec13,33,Calling

44、C from C+,Use extern “C“ to tell the C+ compiler to use C calling conventions/ calling C function from C+:extern “C“ double sqrt(double); / link as a C functionvoid my_c_plus_plus_fct()double sr2 = sqrt(2);/ ,Stroustrup/PPP - Dec13,34,Calling C+ from C,No special action is needed from the C compiler

45、/* call C+ function from C: */int call_f(S* p, int i); /* call f for object pointed to by p with argument i */struct S* make_S(int x, const char* p); /* make S( x,p) on the free store */void my_c_fct(int i)/* */struct S* p = make_S(17, “foo“);int x = call_f(p,i);/* */,Stroustrup/PPP - Dec13,35,ABIs,

46、Application Binary Interface An interface we can use without recompiling the implementation The problem struct file mode_t f_mode;loff_t f_pos;unsigned short f_flags;unsigned short f_count;unsigned long f_reada, f_ramax, f_raend, f_ralen, f_rawin;struct file *f_next, *f_prev; int f_owner; /* pid or

47、-pgrp where SIGIO should be sent */struct inode * f_inode;struct file_operations * f_op;unsigned long f_version;void *private_data; /* needed for tty driver, and maybe others */ ;,Stroustrup/PPP - Dec13,36,ABI,A solution: Access exclusively through functions For example FILE* fopen(const char* name,

48、 const char* mode); printf(FILE*, const char* format, ); int fclose(FILE*); And NEVER use that FILE directly, just pass the FILE*,Stroustrup/PPP - Dec13,37,ABI,C+ alternatives Use a functional ABI (exactly like C) Use a pure abstract class struct Device virtual void open() = 0;virtual void close() = 0;virtual Status read_into(char*) = 0;virtual Status write_from(const char*) = 0;/ ; ABIs; why not? Performance Flexibility,Stroustrup/PPP - Dec13,38,Word counting example (C+ version),#include #include #include using namespace std;int main() map m;for (string s; cins; )ms+;for(const auto ,

copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1