30/09/2018, 18:54
Hàm printf được viết như thế nào?
Hôm nay mình có vô tình thử qua đoạn code sau và vô cùng bất ngờ:
int a = printf("abcd");
đoạn code này không báo bị lỗi, sau đấy mình đã thử thêm vài trường hợp nữa và in ra giá trị của a. Mình nhận ra rằng hàm này có trả về giá trị và giá trị đó là số ký tự trong hàm printf.
ví dụ: int a = printf("abcd");
a = 4;
int b = printf("%d
", 1234);
b có giá trị là 5
mình có thử xem qua mã nguồn của file stido.h nhưng mà không hiểu gì cả. Cái đoạn định nghĩa hàm printf như sau:
extern int printf (const char *__restrict __format, ...);
Mọi người giải thích giúp mình hàm printf này được viết như thế nào.
Bài liên quan
Hàm này trả về 1 số int là số số ký tự. 3 chấm ở đây là 1 mảng char
Bạn xem post trong này của mình nhé
Nếu hàm
printf
chạy thành công nó sẽ trả về số byte đã in raBạn tham khảo thêm cách sử dụng ở đây:
Còn bạn muốn hiểu cách viết của hàm
printf
thì đọc source code của nó (không phải trong filestdio.h
đâu, file đó chỉ có khai báo (prototype) của hàm thôi), nó làm trong thư viện glibc (thử việ mã nguồn mở đi cùng gcc):https://sourceware.org/git/?p=glibc.git;a=blob;f=stdio-common/printf.c;h=4c8f3a2a0c38ab27a2eed4d2ff3b804980aa8f9f;hb=3321010338384ecdc6633a8b032bb0ed6aa9b19a
Cảm ơn các bạn. Mình có thể hiểu được một chút nhưng nói thật là mình chưa có đọc qua cái var_start, var_end bao giờ. Có vẻ như trình mình vẫn còn quá non rồi. Haizz