Bên cạnh các câu trả lời được giải thích rõ ràng khác với bất kỳ mối quan tâm phụ nào được đề cập, tôi muốn đưa ra câu trả lời chính xác và ngắn gọn cho câu hỏi đã cung cấp.
Tại sao printf
với một đối số (không có chỉ định chuyển đổi) không được dùng nữa?
Một printf
lời gọi hàm với đối số duy nhất nói chung là không phản đối và cũng không có lỗ hổng khi sử dụng đúng cách như bạn luôn phải viết mã.
C Người dùng trên toàn thế giới, từ người mới bắt đầu trạng thái đến chuyên gia trạng thái sử dụng printf
cách đó để đưa ra một cụm từ văn bản đơn giản làm đầu ra cho bảng điều khiển.
Hơn nữa, Ai đó phải phân biệt xem đối số một và duy nhất này là một chuỗi ký tự hoặc một con trỏ đến một chuỗi, đối số này hợp lệ nhưng thường không được sử dụng. Tất nhiên, đối với phần sau, có thể xảy ra các kết quả đầu ra không thuận tiện hoặc bất kỳ loại Hành vi không xác định nào , khi con trỏ không được đặt đúng cách để trỏ đến một chuỗi hợp lệ nhưng những điều này cũng có thể xảy ra nếu các chỉ định định dạng không khớp với các đối số tương ứng bằng cách cho nhiều đối số.
Tất nhiên, cũng không đúng và thích hợp rằng chuỗi, được cung cấp như một đối số duy nhất, có bất kỳ định dạng hoặc thông số chuyển đổi nào, vì sẽ không có chuyển đổi nào xảy ra.
Điều đó nói rằng, đưa ra một chuỗi đơn giản giống "Hello World!"
như đối số duy nhất mà không có bất kỳ mã định dạng nào bên trong chuỗi đó giống như bạn đã cung cấp trong câu hỏi:
printf("Hello World!");
hoàn toàn không bị phản đối hoặc " thực hành xấu " cũng như không có bất kỳ lỗ hổng nào.
Trên thực tế, nhiều lập trình viên C bắt đầu học và sử dụng C hoặc thậm chí các ngôn ngữ lập trình nói chung với chương trình HelloWorld đó và printf
câu lệnh này là câu lệnh đầu tiên của loại hình này.
Chúng sẽ không như vậy nếu chúng bị phản đối.
Trong một cuốn sách mà tôi đang đọc, nó được viết rằng printf
với một đối số duy nhất (không có chỉ định chuyển đổi) không được dùng nữa.
Vậy thì tôi sẽ tập trung vào cuốn sách hoặc tác giả. Theo quan điểm của tôi, nếu một tác giả thực sự đang làm như vậy, những khẳng định không chính xác và thậm chí giảng dạy điều đó mà không giải thích rõ ràng tại sao anh ấy / cô ấy lại làm như vậy (nếu những khẳng định đó thực sự tương đương theo nghĩa đen được cung cấp trong cuốn sách đó), tôi sẽ coi đó là một cuốn sách tồi . Một tốt cuốn sách, như trái ngược với điều đó, sẽ giải thích lý do tại sao để tránh những loại nhất định các phương pháp hoặc các chức năng lập trình.
Theo những gì tôi đã nói ở trên, việc sử dụng printf
chỉ với một đối số (một chuỗi ký tự) và không có bất kỳ ký hiệu định dạng nào không bị phản đối hoặc bị coi là "hành vi xấu" .
Bạn nên hỏi tác giả, ý của anh ấy với điều đó hoặc tốt hơn nữa, hãy nhớ anh ấy để làm rõ hoặc sửa phần tương đối cho lần xuất bản tiếp theo hoặc các nhà xuất bản nói chung.
printf("Hello World!")
là không giống nhưputs("Hello World!")
.puts()
phụ lục a'\n'
. Thay vì so sánhprintf("abc")
đểfputs("abc", stdout)