2013-04-02 2 views
-1

나는 time.h 라이브러리를 포함시키지 않고 randomize 함수를 사용하는 코드를 실행할 수있었습니다. 이미 내 코드에 포함되어있는 다른 라이브러리에 자동으로 포함됩니까? 다음은 포함 된 라이브러리 목록입니다.C에서 time.h없이 randomize() 사용

#include <graphics.h> 
#include <stdlib.h> 
#include <stdio.h> 
#include <conio.h> 
#include <dos.h> 
#include <string.h> 
#include <io.h> 
+0

히터 라인 중 하나가 time.h를 포함했을 수도 있습니다. –

+0

TurboC 컴파일러를 사용하고 있습니까? –

+0

그것은이처럼 @ScottMermelstein : 'RANDOMIZE(); 0A0D @ '비 표준 플랫폼이 될 수 TurboC++ – yonatan

답변

2

이것은 라이브러리의 버전 및 구현에 따라 매우 다릅니다. 이 표준은 어떤 헤더에 time.h 을 포함하도록 강제하지 않으므로 이에 의존 할 수 없습니다. 귀하의 경우에는

, 그것은 하나의 io.h, dos.h의 예를 들어 conio.htime.h을 포함하고있다 (또는 가치가 모두가 헤더의 다른 어떤) 일 수 있었다.


1 적어도 사람이 아니라 가능성이 보이는 고대의 도서관이다. C11은 threads.h이 포함되어야 함을 나타냅니다. time.h

+0

'dos.h'의이 줄은 설명 할 수 있겠습니까? 'void _Cdecl _dos_gettime (struct dostime_t * __ timep);' – yonatan

+0

@yonatan,'randomize()'에 대한 문서를 찾을 수 없으므로 말할 수 없습니다 . 그러나 귀하의 통화 (예 :'randomize()'와'random (300)')은 시간 함수를 전혀 사용하지 않습니다. 왜'time.h'가 포함될 것으로 기대합니까? 비표준 플랫폼에서'randomize'가 정의 된 곳을 찾아야합니다. 'stdlib.h'는 좋은 추측입니다. – Shahbaz

+0

'randomize()'는 현재 시간을 기준으로'random()'의 초기 값을 무작위로 만들므로 컴파일러 문서는'time.h'을 요구합니다. – yonatan

1

<compiler with high warning level> yourcode.c은 무엇이라고 말합니까? 내 생각은 다음과 같습니다

  • 중 하나를 표준이 아닌 DOS 고유의 헤더 중 하나 (conio.h, dos.h, io.h, ...)을 포함,

  • 또는 어떤 선언이 전혀 없다, 나는 . 이자형. 그것은 포함되지 않습니다.이 경우 컴파일러는 자동으로 함수 서명을 암시 적으로 암시합니다 (특히 int의 반환 값과 처음 호출 할 인수 유형을 가정합니다).

주 후자의 경우 잘못 ,하고 당신이 그것을 (이 프로그램 정의되지 않은 동작을 호출 이어질 수 있기 때문에)하지 말아야 할주의 을 지불해야한다고. 항상 그러한 경고를 추적 할 수 있도록 모든 경고를 사용하여 컴파일하십시오.

+0

을 사용하고' ,' '임의 (300). http://tigcc.ticalc.org/doc/stdlib.html –

+0

@ 0A0D 정교하게 작성하십시오. 그 뜻은 무엇입니까? 나는 그 링크를 보았고 ''에는'time() '이 없다. –

+0

내가 연결 한 ticalc 웹 사이트와 같은 비표준 플랫폼에서 randomize()는 stdlib의 함수라는 것을 의미합니다. –

1

C 컴파일러는 함수에 프로토 타입을 찾을 수없는 경우 int를 반환하는 함수라고 가정합니다. 또한 기본 설정을 변경하지 않은 경우 경고 기능을 인쇄합니다.

So. 아마도 time.h가 포함되었을 수도 있지만 그렇지 않은 경우 많은 문제를 일으킬 수 있음을 알고 있어야합니다.