Bài giảng Hệ điều hành linux: Chương 8 Lập Trình C trong Linux do Ngô Văn Công biên soạn cung cấp các kiến thức cơ bản như: Hello world program, ngôn ngữ C, trình biên dịch make,...
Trang 1Lập Trình C trong Linux
Trang 3Giới thiệu
Ngôn ngữ lập trình C là lựa chọn tốt cho những người mới học lập trình
Linux là môi trường thích hợp để viết các chương trình
Không cần mất chi phí mua các phầm mềm hỗ
Trang 4Biên dịch với gcc
“human-readable source code” sang readable object code”
Java
[CODE]% gcc [ tùy chọn | tên file ]
Giả sử bạn có 1 file myfile.c khi bạn đánh :
% gcc myfile.c
đó là file output mặc định của gcc Lúc này bạn đã có thể run chương trình bằng :
% /a.out
Trang 5trên thì file a.out của bạn sẽ bị ghi đè bằng file thứ 2
để đặt tên file out put
% gcc -o myout myfile.c
errors nhỏ nhưng gcc sẽ thay bạn sửa chửa những lỗi này (trừ khi đó là lỗi lớn) Nhưng trên thực tế' mình phải tự sửa các lỗi này để chương trình sau khi compile là bug-free Bạn sẽ thêm 1 tùy chọn là -Wall (viết tắt của Warning All -
Thông báo tất cả lỗi)
% gcc -Wall -o myout myfile.c
Trang 6 Int main(): Int chỉ giá trị trả về của hàm main(), main là tên của điểm bắt đầu của chương trình
{}: nhóm các lệnh lại
printf("Hello World\n"): hiển thị văn bản lên màn hình
return 0: trả về 0 cho hàm main
(hello.c)
#include <stdio.h>
int main() {
printf("Hello, world!\n");
return 0;
}
Trang 7Writes the words "Hello World" on the screen */
#include<stdio.h>
int main() {
printf("Hello World\n"); //prints "Hello World"
return 0;
}
Trang 8Biến và hằng
Biến: biến trong C là vị trí bộ nhớ được đặt tên
Giá trị số: nguyên hay thực
Hằng: không thể thay đổi giá trị
Trang 9Biến và hằng
Khai báo biến hằng
Biến dạng Signed và unsigned
int main() {
int a,b,c; return 0; }
int main() {
const float pi = 3.14;
return 0;
}
int main() {
unsigned int a;
signed int b;
return 0;
}
Trang 10Đọc và hiển thị biến
scanf: đọc giá trị nhập từ bàn phím
#include<stdio.h>
int main() {
Trang 11Câu lệnh điều kiện
Câu lệnh if
#include<stdio.h>
int main() {
int mark;
char pass;
scanf("%d",&mark);
if (mark > 40) pass = 'y';
return 0;
}
#include<stdio.h>
int main() {
int mark;
char pass;
scanf("%d",&mark);
if (mark > 40) {
pass = 'y';
printf("You passed"); }
else { pass = 'n';
printf("You failed"); }
return 0;
}
Trang 12Toán tử ?
expression1 ? expression2: expression3 <=>
if expression1 then expression2 else
expression3
z = (a>b) ? a : b; <=> if (a>b) z = a; else z=b;
Trang 15Vòng lặp while
while (expression) statement
int x=3;
main() {
while (x>0) {
printf("x=%d \n",x); x ;
} }
Trang 16Vòng lặp
#include<stdio.h>
int main() {
int i,times;
scanf("%d",×);
i = 0;
do { i++;
printf("%d\n",i); }
while (i <= times);
return 0;
}
Trang 17Con trỏ
Do đó được gọi là con trỏ, trỏ tới giá trị nằm tại vùng nhớ đó
Khai báo con trỏ: đặt * phía trước tên của nó
int main() {
Trang 19Chú ý
int *ip; *ip = 100;
Báo lỗi (program crash!!)
int *ip; int x; ip = &x; *ip = 100;
Trang 21return a + b;
} int main() {
Trang 22Câu lệnh make
Dịch lại chương trình lớn thì lâu hơn rất nhiều
so với khi dịch các chương trình nhỏ
mà vẫn theo vết các thay đổi so với lần biên dịch trước đó
Trang 23Quá trình biên dịch đơn giản
Trang 24Biên dịch với nhiều tệp
Trang 25Biên dịch với nhiều tệp
Compile green.o: gcc -c green.c Compile blue.o: gcc -c blue.c
Link the parts together: gcc green.o blue.o
Trang 26Chú ý khi chia chương trình C thành
nhiều tệp
nào cùng định nghĩa một biến
Khai báo biến toàn cục trong một tệp:extern int globalvar;
Khi dùng hàm định nghĩa trong tệp khác, tạo tệp h với prototype của hàm và dùng từ khóa
#include để thêm tệp h vào trong tệp c của bạn
Khi bạn định nghĩa một biến:int globalvar;
Khi bạn khai báo một biến:extern int globalvar;
Trang 27Biểu đồ phụ thuộc(Dependency graphs)
Trang 28Cách hoạt động make
Trang 29target : source file(s)
command (must be preceded by a tab)
Trang 30Sử dụng makefile với make
gcc add.o main.o –o main
Int add(int a, int b);
printf(“%d”,add(2,3)); }
Trang 32program1: add.o main.o
gcc add.o main.o –o vidu1 add.o: add.c head.h
gcc –c add.c main.c: head.h main.c
gcc –c main.c