Thiết kế chương trình C
Module hóa - Chia file
// math_utils.h
#ifndef MATH_UTILS_H
#define MATH_UTILS_H
int add(int a, int b);
int mul(int a, int b);
#endif
// math_utils.c
#include "math_utils.h"
int add(int a, int b) { return a + b; }
int mul(int a, int b) { return a * b; }
// main.c
#include "math_utils.h"
int main() { printf("%d", add(5,3)); }
Makefile
CC = gcc
CFLAGS = -Wall -O2
OBJ = main.o math_utils.o
program: $(OBJ)
$(CC) $(CFLAGS) -o program $(OBJ)
%.o: %.c
$(CC) $(CFLAGS) -c $<
clean:
rm -f *.o program
Static Library
gcc -c math_utils.c
ar rcs libmath.a math_utils.o
gcc main.c -L. -lmath -o program
Shared Library (Linux)
gcc -fPIC -c math_utils.c
gcc -shared -o libmath.so math_utils.o
gcc main.c -L. -lmath -o program
export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH
./program
Qui tắc thiết kế
- Mỗi file .c đi kèm 1 file .h
- Tránh biến global (dùng static)
- Dùng enum thay #define cho hằng số nhóm
- Documentation với comment
- Kiểm tra lỗi ở mọi hàm hệ thống
Coding convention
// Ten ham: snake_case
// Hang so: UPPER_CASE
// Bien: meaningful names
// Khoang trong: 4 spaces / 1 tab