2013-08-13 48 views
6

Có phương pháp nào có thể để viết chương trình C mà không bao gồm stdio.h làm tệp tiêu đề hay không. Có ý kiến ​​cho rằng nó có thể được thực hiện bằng cách tuyên bố extern int scanf(char* format, ...);Cách sử dụng scanf() mà không bao gồm stdio.h

#include <stdio.h> //I want this same code to work without including this line 

int main() 
{ 
    char str [80]; 
    scanf ("%s",str); 
    return 0; 
} 
+15

tại sao bạn nghĩ rằng bao gồm 'stdio.h' là xấu? –

+0

Bạn sẽ thấy rằng trong C, không phải C++, bạn cần 'stdio.h' thường xuyên hơn bạn nghĩ. Ví dụ, trong C, đâu là 'NULL' được định nghĩa? – cdarke

+2

@WouterHuysentruit Tôi chỉ muốn biết nếu có các giải pháp khả thi. – Niko

Trả lời

10

Bạn có thể khai báo scanf chức năng với:

extern int scanf(const char *format, ...); 

Từ khóa extern là không bắt buộc nhưng tôi muốn có nó như một lời nhắc nhở về sự kiện rằng hàm được định nghĩa ở nơi khác.

dụ của bạn sau đó sẽ như thế nào:

extern int scanf(const char *format, ...); 

int main() 
{ 
    char str [80]; 
    scanf ("%s",str); 
    return 0; 
} 
+9

Điều này chỉ hoạt động nếu 'scanf' được thực hiện như một hàm. Không có gì trong các yêu cầu C nói rằng nó không thể là một macro mà gọi một số chức năng khác như 'fscanf'. –

+0

Nếu nó có thể được sử dụng, bạn có thể viết mã cho tôi không. Vui lòng chỉnh sửa câu trả lời – Niko

+7

@DavidHammen No. Từ phần 7.1.4/1, chú thích 155 của tiêu chuẩn ISO C99: "Điều này có nghĩa là việc triển khai sẽ cung cấp chức năng thực tế cho từng chức năng thư viện, ngay cả khi nó cũng cung cấp macro chức năng." Các macro có thể được cung cấp * ngoài * đối với các chức năng thư viện chuẩn, nhưng chúng không thể thay thế chúng hoàn toàn. – jamesdlin

1

Trong C-89, mã mà sẽ biên dịch mà không có sự #include, như nguyên mẫu hàm là không bắt buộc.

Có nói đó, nó đi kèm theo danh sách các 'những điều thực sự xấu để làm' - scanf có thể là một vĩ mô, nó có thể có một hoặc các thông số cần thiết hơn, ...

Vì vậy, bạn có thể làm điều đó, nhưng nó giống như lái xe vào ban đêm mà không có đèn. Bạn có trách nhiệm sụp đổ, ngay cả khi bạn nghĩ rằng bạn biết đường.

+0

Bạn có thể cung cấp lý do cho việc giảm giá không? –

Các vấn đề liên quan