2013-04-02 2 views
-1

Мне удалось запустить код, который использует функцию randomize без включения библиотеки time.h. он автоматически включается в некоторые другие библиотеки, которые, возможно, уже были включены в мой код? Ниже приведен список библиотек I включены:using randomize() без time.h в C

#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()' ' случайных (300),' @ 0A0D Я использую TurboC++ – yonatan

ответ

2

Это очень специфично для версии и реализации вашей библиотеки. Стандарт не заставляет заголовок включать time.h , поэтому вы не можете положиться на это.

В вашем случае это может быть, что один из dos.h, io.h, conio.h, например, включил time.h (или любой другой из заголовков там все это стоит).


По крайней мере, не те там и не вероятно, в вашей, казалось бы, древней библиотеке. 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

Может быть нестандартной платформой. http://tigcc.ticalc.org/doc/stdlib.html –

+0

@ 0A0D Пожалуйста, уточните, что вы подразумеваете под этим? Я посмотрел на эту ссылку и нет 'time()' в ''. –

+0

Я имею в виду, что на нестандартной платформе, такой как веб-сайт ticalc, с которым я связан, randomize() является функцией в stdlib. –

1

Когда компилятор C не может найти прототип функции, он предполагает, что это функция, которая возвращает int. Он также печатает функцию предупреждения, если вы не изменили настройки по умолчанию.

So. В вашем случае, возможно, time.h был включен, но имейте в виду, что это может вызвать массу проблем, если это не так.