Module 22: Thiết kế chương trình

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