Я не могу говорить с предсказуемостью порядковых номеров, но это будет уникально. Я думаю, что Вы были бы более обеспеченным использованием генератора случайных чисел от Системы. Безопасность. Криптография, все же. Свяжите случайное число монотонно увеличивающимся значением (время) для генерации уникального ключа, и можно быть уверены, что это уникально и не предсказуемо.
Посмотрите на код ядра Unix Версии 6 - так выглядел C!
См. Комментарий Lion к 6-му изданию Unix ( Amazon ).
Кроме того, было бы проще, если бы вы сказали нам свой возраст - в вашем профиле указано, что вам 22 года, поэтому вы спрашиваете о коде до 1987 г.
Также учтите: Unix Среда программирования с 1984 г.
Ну, для начала, не было никакого мусора, связанного с прототипом функции. main ()
был объявлен так:
/* int */ main(c,v)
int c;
char *v[];
{
/* Do something here. */
}
И не было ни одного из этих замечательных комментариев с двойной косой чертой. Ни перечислений. Настоящие мужчины использовали #define
.
Ааа, мне наворачиваются слезы, вспоминая старые добрые времена: -)
Исходя из личного опыта, моими первыми двумя средами компилятора / разработки C были DeSmet C (16-разрядная командная строка MS-DOS) и Lattice C (также 16-разрядная командная строка MS-DOS). DeSmet C поставляется с собственным текстовым редактором ( see.exe
) и библиотеками - нестандартные функции, такие как scr_rowcol ()
, позиционируют курсор. Однако даже тогда существовали определенные стандартные функции, такие как printf (), fopen () fread (), fwrite () и fclose ()
.
Одна из интересных особенностей время было, что у вас был выбор между четырьмя основными моделями памяти - S, P, D и L. Другие вариации появлялись и исчезали с годами, но они были наиболее значимыми. S была "маленькой" моделью, 16-битная адресация как для кода, так и для данных, ограничивая вас 64 КБ для каждого. L использовал 24-битную адресацию, которая представляла собой 16-битный сегментный регистр и 16-битный регистр смещения для вычисления адресов, ограничивая вас до 1024 КБ адресного пространства. Конечно, в мире 16-битной DOS вы были ограничены физическими ограничениями в 640 КБ. P и D были компромиссами между двумя режимами, где P допускал 24-битный (640K) код и 64K данных, а D допускал адресацию 64K и 640K данных.
Взгляните на ' домашнюю страницу ' книги K&R в Bell Labs, в частности на заголовок «История языка прослеживается в« The Development » языка Си »», из HOPL II, 1993 »
Вот один пример кода, который изменился с помощью ANSI C к лучшему:
double GetSomeInfo(x)
int x;
{
return (double)x / 2.0;
}
int PerformFabulousTrick(x, y, z)
int x, int y;
double z;
{
/* here we go */
z = GetSomeInfo(x, y); /* argument matching? what's that? */
return (int)z;
}
Впервые я начал работать с C над VAX / VMS в 1986 году. Вот отличия, которые я помню:
int main() /* no void to specify empty parameter list */ { void foo(); /* no parameter list in declaration */ ... } ... void foo(x,y) int x; double y; { ... }
Нет универсального (пустого) типа указателя; все функции * alloc ()
вместо этого вернули char *
(что является частью того, почему некоторые люди до сих пор приводят возвращаемое значение malloc (); с компиляторами до ANSI вы имел до);
Функции с переменным числом переменных обрабатывались по-разному; никаких фиксированных аргументов не требовалось, а заголовочный файл имел другое имя (varargs.h вместо stdarg.h);
Много материала было добавлено в математику. h с годами, особенно в стандарте C99; Си 80-х годов не был лучшим инструментом для числовой работы
Библиотеки не были стандартизированы; почти все реализации имели версии stdio, math, string, ctype и т. д., но содержимое не обязательно было одинаковым для разных реализаций.
Хотя по очевидным причинам базовый язык появился раньше библиотеки, если вы получите копию первого издания K&R, опубликованную в 1978 году, вы найдете библиотеку очень знакомой. Кроме того, C изначально использовался для разработки под Unix, а библиотека подключена к службам ввода-вывода ОС. Так что я думаю, что утверждение вашего профессора, вероятно, апокрифично.
Наиболее очевидное различие заключается в способе определения функций:
VOID* copy( dest, src, len )
VOID* dest ;
VOID* src ;
int len ;
{
...
}
вместо:
void* copy( void* dest, void* src, int len )
{
...
}
например. Обратите внимание на использование VOID; K&R C не имел типа void, и обычно VOID был макросом, определенным как int *. Само собой разумеется, чтобы это работало, проверка типов в ранних компиляторах была разрешительной. С практической точки зрения способность C проверять код была плохой (в основном из-за отсутствия прототипов функций и слабой проверки типов), и отсюда популярность таких инструментов, как lint.
В 1978 году определение языка была книгой K&R. В 1989 году он был стандартизирован ANSI, а позже - ISO, 2-е издание больше не считается определением языка и было основано на ANSI C. Это все еще лучшая книга по C IMO и хорошая книга по программированию в целом.
В Википедии есть краткое описание, которое может помочь. Лучше всего получить первую копию K&R, однако я бы не стал использовать ее для изучения Си, получите 2-е изд. для этого.
способность C проверять код была плохой (в основном из-за отсутствия прототипов функций и слабой проверки типов), и отсюда популярность таких инструментов, как lint.В 1978 году определение языка было Книга K&R. В 1989 году он был стандартизирован ANSI, а позже - ISO, 2-е издание больше не считается определением языка и было основано на ANSI C. Это все еще лучшая книга по C IMO и хорошая книга по программированию в целом.
В Википедии есть краткое описание, которое может помочь. Лучше всего получить первую копию K&R, однако я бы не стал использовать ее для изучения Си, получите 2-е изд. для этого.
способность C проверять код была низкой (в основном из-за отсутствия прототипов функций и слабой проверки типов), и, следовательно, популярность таких инструментов, как lint.В 1978 году определение языка было Книга K&R. В 1989 году он был стандартизирован ANSI, а позже - ISO, 2-е издание больше не считается определением языка и было основано на ANSI C. Это все еще лучшая книга по C IMO и хорошая книга по программированию в целом.
В Википедии есть краткое описание, которое может помочь. Лучше всего получить первую копию K&R, однако я бы не стал использовать ее для изучения Си, получите 2-е изд. для этого.
В 1989 году он был стандартизирован ANSI, а позже - ISO, 2-е издание больше не считается определением языка и было основано на ANSI C. Это все еще лучшая книга по C IMO и хорошая книга по программированию в целом.В Википедии есть краткое описание, которое может помочь. Лучше всего получить первую копию K&R, однако я бы не стал использовать ее для изучения Си, получите 2-е изд. для этого.
В 1989 году он был стандартизирован ANSI, а позже - ISO, 2-е издание больше не считается определением языка и было основано на ANSI C. Это все еще лучшая книга по C IMO и хорошая книга по программированию в целом.В Википедии есть краткое описание, которое может помочь. Лучше всего получить первую копию K&R, однако я бы не стал использовать ее для изучения Си, получите 2-е изд. для этого.
Я начал использовать C в начале 1980-х. Ключевое различие, которое я заметил между тем и другим, заключалось в том, что ранний C не имел прототипов функций, как кто-то заметил. Самый ранний из когда-либо используемых CI имел почти такую же стандартную библиотеку, как и сегодня. Если было время, когда в C не было printf или fwrite, то это было даже до моего времени! Я выучил C из оригинальной книги K&R. Это действительно классика и доказательство того, что технически искушенные люди также могут быть отличными писателями. Я уверен, что вы найдете его на Amazon.
Вы можете взглянуть на запутанные записи конкурса C за период времени, который вы ищете.