Без единого #include вы можете создать только "программу в себе", то есть нечто, использующее только средства языка программирования. Фактически, это минимальный набор операций типа размещения переменных в регистре или стеке, вычислительные операции и всё.

Сишник до понимания этой простейшей концепции допереть не может.

C - язык очень близкий к компьютеру вообще, и к UNIX, в частности. Чтобы понять, что такое библиотеки, системные вызовы, файлы, стек, и прочее - надо залезть чуть поглубже - рекомендую проштудировать Programming from Ground Up - свободная книга (ассемблера много). Там вся программная модель С по полочкам разложена.
А насчет Паскаля и прочих оберонов - мда... Крепка советская школа.

===
2 Sergey - берешь и обращаешься - твоя программа:
#define BUFSIZ 512
main()
{
char buf[BUFSIZ];
int n;
while((n = read(0, buf, BUFSIZ)) > 0)
write(1, buf, n);
return 0;
}
Пользователь решил продолжить мысль 26 Марта 2011, 12:13:14:
Включаемый файл с расширением .h - это простой текстовый файл и содержит в себе, как правило объявления макросов и функций. Они или физически присутствуют в папке /usr/include или компилятор "знает" содержание этих файлов.
При компиляции компилятор проверяет вызовы функций (количество и тип аргументов и тип возвращаемого значения) на соответствие объявлению данной функции. По историческим причинам, если функция не объявлена (т. е. не включен соответсвующий .h файл), аргументы не проверяются, а функция считается, что возвращает значение int. Если это не так - вываливаемся при попытке запуска скомпилированного файла.
Объявления необходимых функций и макросов можно сделать и самостоятельно, если их знать. Объявление write можно получить задав команду
man 2 write или просмотрев заголовочный файл. syscalls.h - это для linux-а /usr/include/unistd.h
Код для вызова системных функций gcc встраивает непосредственно в исполняемый файл - никаких дополнительных библиотек (библиотечных файлов) не требуется.