Libft – بناء أول مكتبة C خاصة بك
شروع Libft هو أول مشروع حقيقي في مرحلة الكور، وهدفه فهم كيف تعمل دوال C القياسية داخلياً من خلال إعادة بنائها من الصفر.
في هذا المشروع ستتعلم إدارة الذاكرة، التعامل مع المؤشرات، وفهم سلوك الدوال القياسية بدقة، بالإضافة إلى بناء Linked List يدوياً.
📚 مصادر موثوقة للدراسة (مهمة جداً)
هاي مصادر تعليمية موثوقة ومناسبة لـ Libft:
🔹 1. C Standard Library Reference
- https://man7.org/linux/man-pages/
- https://cplusplus.com/reference/cstring/
- https://man.freebsd.org/cgi/man.cgi
هاي أهم مصدر لفهم:
strlen
memcpy
memmove
atoi
strnstr
etc
🔹 2. Memory Management
- https://www.geeksforgeeks.org/dynamic-memory-allocation-in-c/
- https://man7.org/linux/man-pages/man3/malloc.3.html
مهم جداً لفهم:
malloc
calloc
free
memory leaks
🔹 3. Pointer & Memory Deep Explanation
🔹 4. Linked List شرح نظيف
- https://www.geeksforgeeks.org/data-structures/linked-list/
- https://www.programiz.com/dsa/linked-list
نصيحة مهمة:
اقرأ man page لكل دالة قبل ما تكتبها. لا تعتمد على الذاكرة.
2️⃣ الجزء الثاني: Additional Functions
هاي المرحلة أصعب شوي لأنها تعتمد على malloc.
دوال مثل:
- ft_substr
- ft_split
- ft_strjoin
- ft_itoa
شو تتعلم هون؟
- Allocation sizing الصحيح
- التعامل مع failure في malloc
- Free في حالة الخطأ (مهم جداً في ft_split)
- التعامل مع negative numbers في itoa
3️⃣ الجزء الثالث: Linked List
بناء struct:
typedef struct s_list
{
void *content;
struct s_list *next;
} t_list;
دوال مهمة:
- ft_lstnew
- ft_lstadd_back
- ft_lstclear
- ft_lstmap
شو تتعلم هون؟
- Dynamic data structures
- pointer to pointer
- memory ownership
- deep vs shallow copy
أخطاء شائعة في Libft
- نسيان حماية NULL
- Memory leaks
- خطأ في حساب الحجم عند malloc
- عدم التعامل مع INT_MIN في ft_itoa
- خطأ في memmove عند overlapping
🛠️ أدوات مهمة أثناء العمل
- valgrind
- printf debugging
- make re
- unit testing بسيط بنفسك
كيف تختبر Libft؟
لا تعتمد على أن الكود “يشتغل مرة”.
اختبر كل دالة بحالات Edge Cases:
- Empty string
- NULL pointer
- Large input
- Negative numbers
Libft ليس مجرد مشروع، بل هو الأساس الذي ستبني عليه بقية مشاريع الكور مثل get_next_line و ft_printf و push_swap. كلما كان Libft نظيفاً ومفهوماً لديك، كلما أصبحت بقية المشاريع أسهل
