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.

Đỗ Trung Quân viết 21:08 ngày 30/09/2018

Hàm này trả về 1 số int là số số ký tự. 3 chấm ở đây là 1 mảng char

明玉 viết 20:57 ngày 30/09/2018

Bạn xem post trong này của mình nhé

Chào các bạn, Mình đang có một vấn đề cần các bạn giúp đỡ. Các bạn có thể giúp mình viết 1 hàm SUM để chạy được với tất cả các lời gọi hàm ở main kia không? Mình xin cảm ơn các bạn [image]

Pham Van Hai viết 21:07 ngày 30/09/2018

Nếu hàm printf chạy thành công nó sẽ trả về số byte đã in ra
Bạn tham khảo thêm cách sử dụng ở đây:

Return value
1-2) Number of characters written if successful or a negative value if an error occurred.
http://en.cppreference.com/w/cpp/io/c/fprintf

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 file stdio.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

Nguyễn Văn Dũng viết 21:07 ngày 30/09/2018

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

Bài liên quan
0