2013-08-13 3 views
6

stdio.h을 헤더 파일로 포함하지 않고 C 프로그램을 작성할 수있는 방법이 있습니까? 그것은 당신과 함께 scanf 함수를 선언 할 수 extern int scanf(char* format, ...);stdio.h를 포함하지 않고 scanf() 사용 방법

#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

왜 'stdio.h'를 포함하는 것이 좋지 않다고 생각하십니까? –

+0

C++이 아닌 C에서, 당신이 생각하는'stdio.h'가 더 자주 필요합니다. 예를 들어 C에서'NULL '은 어디에 정의되어 있습니까? – cdarke

+2

@WouterHuysentruit 가능한 해결책이 있는지 알고 싶습니다. – Niko

답변

10

를 선언하여 구현 될 수 있음을 제안했다 :

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

통근 키워드는 선택 사항입니다하지만 난 사실을 알림으로 포함 할 그 기능은 다른 곳에 정의되어있다. 함수 프로토 타입은 선택 사항으로, 그 코드의 사용법 #include없이 컴파일 것

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

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

이것은 'scanf'가 함수로 구현 된 경우에만 작동합니다. C 요구 사항에는 'fscanf'와 같은 다른 함수를 호출하는 매크로가 될 수 없다는 내용은 없습니다. –

+0

사용할 수 있다면 나를위한 코드를 작성할 수 있습니까? Answer – Niko

+7

@DavidHammen No. ISO C99 표준의 섹션 7.1.4/1, 각주 155에서 : "구현은 각 라이브러리 함수에 대한 실제 함수를 제공해야 함을 의미합니다. 기능." 매크로는 표준 라이브러리 함수에 추가로 * 제공 될 수 있지만 완전히 대체 할 수는 없습니다. – jamesdlin

1

C-89 :처럼

귀하의 예는 다음 보일 것이다.

은 '할 수있는 정말 나쁜 일'의 목록에서 오는, 말로 미루어 보아 - scanf 매크로있을 수 있습니다, 그것은 하나 이상의 필수 매개 변수를 가질 수 ...

그래서 당신이 그것을 할 수 있습니다, 그러나 밤에는 조명없이 운전하는 것과 같습니다. 도로를 알고 있다고 생각하는 사람도 추락 할 수 있습니다.

+0

downvote의 이유를 제공해 줄 수 있습니까? –

관련 문제