The document provides an introduction to the C programming language. It discusses C's history as a systems programming language developed alongside UNIX in the 1970s. It describes C's characteristics as a middle-level language that provides low-level access to hardware while including some high-level features like functions. It also notes potential dangers in C like a lack of type safety and memory management. The document explains the separate compilation process in C and provides examples of common C code structures like main functions and the use of preprocessor directives and library functions.
Report
Share
Report
Share
1 of 16
More Related Content
C introduction
1. Introduction to C (Reek, Chs. 1-2) CS 3090: Safety Critical Programming in C
2. C: History Developed in the 1970s – in conjunction with development of UNIX operating system When writing an OS kernel, efficiency is crucial This requires low-level access to the underlying hardware: e.g. programmer can leverage knowledge of how data is laid out in memory, to enable faster data access UNIX originally written in low-level assembly language – but there were problems: No structured programming (e.g. encapsulating routines as “functions”, “methods”, etc.) – code hard to maintain Code worked only for particular hardware – not portable CS 3090: Safety Critical Programming in C
3. C: Characteristics C takes a middle path between low-level assembly language… Direct access to memory layout through pointer manipulation Concise syntax, small set of keywords … and a high-level programming language like Java: Block structure Some encapsulation of code, via functions Type checking (pretty weak) CS 3090: Safety Critical Programming in C
4. C: Dangers C is not object oriented! Can’t “hide” data as “private” or “protected” fields You can follow standards to write C code that looks object-oriented, but you have to be disciplined – will the other people working on your code also be disciplined? C has portability issues Low-level “tricks” may make your C code run well on one platform – but the tricks might not work elsewhere The compiler and runtime system will rarely stop your C program from doing stupid/bad things Compile-time type checking is weak No run-time checks for array bounds errors, etc. like in Java CS 3090: Safety Critical Programming in C
5. Separate compilation A C program consists of source code in one or more files Each source file is run through the preprocessor and compiler , resulting in a file containing object code Object files are tied together by the linker to form a single executable program CS 3090: Safety Critical Programming in C Source code file1.c Preprocessor/ Compiler Object code file1.o Source code file2.c Preprocessor/ Compiler Object code file2.o Linker Libraries Executable code a.out
6. Separate compilation Advantage: Quicker compilation When modifying a program, a programmer typically edits only a few source code files at a time. With separate compilation, only the files that have been edited since the last compilation need to be recompiled when re-building the program. For very large programs, this can save a lot of time. CS 3090: Safety Critical Programming in C
7. How to compile (UNIX) To compile and link a C program that is contained entirely in one source file: cc program.c The executable program is called a.out by default. If you don’t like this name, choose another using the –o option: cc program.c –o exciting_executable To compile and link several C source files: cc main.c extra.c more.c This will produce object ( .o ) files, that you can use in a later compilation: cc main.o extra.o more.c Here, only more.c will be compiled – the main.o and extra.o files will be used for linking. To produce object files, without linking, use -c : cc –c main.c extra.c more.c CS 3090: Safety Critical Programming in C
8. The preprocessor The preprocessor takes your source code and – following certain directives that you give it – tweaks it in various ways before compilation. A directive is given as a line of source code starting with the # symbol The preprocessor works in a very crude, “word-processor” way, simply cutting and pasting – it doesn’t really know anything about C! CS 3090: Safety Critical Programming in C Your source code Preprocessor Enhanced and obfuscated source code Compiler Object code
9. A first program: Text rearranger Input First line: pairs of nonnegative integers, separated by whitespace, then terminated by a negative integer x 1 y 1 x 2 y 2 … x n y n -1 Each subsequent line: a string of characters Output For each string S, output substrings of S: First, the substring starting at location x 1 and ending at y 1 ; Next, the substring starting at location x 2 and ending at y 2 ; … Finally, the substring starting at location x n and ending at x n . CS 3090: Safety Critical Programming in C
10. Sample input/output Initial input: 0 2 5 7 10 12 -1 Next input line: deep C diving Output: deeC ding Next input line: excitement! Output: exceme! … continue ad nauseum… Terminate with ctrl-D (signals end of keyboard input) CS 3090: Safety Critical Programming in C
11. Use of comments /* ** This program reads input lines from the standard input and prints ** each input line, followed by just some portions of the lines, to ** the standard output. ** ** The first input is a list of column numbers, which ends with a ** negative number. The column numbers are paired and specify ** ranges of columns from the input line that are to be printed. ** For example, 0 3 10 12 -1 indicates that only columns 0 through 3 ** and columns 10 through 12 will be printed. */ Only /* … */ for comments – no // like Java or C++ CS 3090: Safety Critical Programming in C
12. Comments on comments Can’t nest comments within comments /* is matched with the very next */ that comes along Don’t use /* … */ to comment out code – it won’t work if the commented-out code contains comments /* Comment out the following code int f(int x) { return x+42; /* return the result */ } */ Anyway, commenting out code is confusing, and dangerous (easy to forget about) – avoid it CS 3090: Safety Critical Programming in C Only this will be commented out This will not!
13. Preprocessor directives #include <stdio.h> #include <stdlib.h> #include <string.h> The #include directives “paste” the contents of the files stdio.h , stdlib.h and string.h into your source code, at the very place where the directives appear. These files contain information about some library functions used in the program: stdio stands for “standard I/O”, stdlib stands for “standard library”, and string.h includes useful string manipulation functions. Want to see the files? Look in /usr/include CS 3090: Safety Critical Programming in C
14. Preprocessor directives #define MAX_COLS 20 #define MAX_INPUT 1000 The #define directives perform “ global replacements”: every instance of MAX_COLS is replaced with 20 , and every instance of MAX_INPUT is replaced with 1000 . CS 3090: Safety Critical Programming in C
15. The main() function main() is always the first function called in a program execution. int main( void ) { … void indicates that the function takes no arguments int indicates that the function returns an integer value Q: Integer value? Isn’t the program just printing out some stuff and then exiting? What’s there to return? A: Through returning particular values, the program can indicate whether it terminated “nicely” or badly; the operating system can react accordingly. CS 3090: Safety Critical Programming in C
16. The printf() function printf( "Original input : %s", input ); printf() is a library function declared in <stdio.h> Syntax: printf( FormatString , Expr , Expr ...) FormatString : String of text to print Expr s: Values to print FormatString has placeholders to show where to put the values (note: #placeholders should match # Expr s) Placeholders: %s (print as string), %c (print as char), %d (print as integer), %f (print as floating-point) indicates a newline character CS 3090: Safety Critical Programming in C Make sure you pick the right one! Text line printed only when encountered Don’t forget when printing “final results”