CSE 2541 – Advanced C Programming Instructor: Yang Zhang
Course info Prereq – CSE 2221 or CSE 222 Co-req – CSE 2231 Website –
Brief history of C 1970’s – Unix – C, from BCPL (Thompson and Ritchie) C programming Language – Widely used like the others: Fortran, Pascal – Main form of language for system programming – Available on any machine with C compiler and library
Why C? Popular language – Operating systems (Win, Linux, FreeBSD) – Web servers (Apache) – Web browsers (Fox) – Mail servers (sendmail, postfix) – DNS servers (bind) – Graphics card programming (OpenCL) Programming language rankings Why? – Performance – Portability – Familiar to programmers
Why C? Compared to assembly language – Abstracts the hardware view (registers, memory, call stacks), making code portable and easier – Provides variables, functions, arrays, complex arithmetic, Boolean expressions Compared to other high-level languages – Maps almost directly into hardware instructions, making optimization easier – Provides a minimal set of abstractions compared to other HLLs – Like other HLLs, makes complex programming simpler (at the expense of efficiency)
Hello World – code /* Hello World! */ #include int main() { printf(“Hello World!\n”); return 0; }
C compilation model
Hello World – walkthrough C program: hello.c – emacs, vi, vim, pico, joe … – Plaintext only Preprocessing: hello.s, assembly code – cc -S hello.c Compilation: hello.o, a binary file – cc -c hello.s Linking: a.out or hello, an executable file – cc hello.o – cc -o hello hello.o Loading (dynamical linking) and execution:./hello –./a.out –./hello
Hello World – content breakdown Comment Preprocessor directive Function definition Output statement Return clause
#include int main() { int first, second, add; float divide; printf("Enter two integers\n"); scanf("%d%d", &first, &second); add = first + second; divide = first / (float)second; printf("Sum = %d\n",add); printf("Division = %.2f\n",divide); return 0; } Second Example
Second example – content breakdown Variables Function calls – Input – Output Operators Typecasting