Первый шаг в программировании на С (оказался неудачным.)

Модератор: Модераторы разделов

promov
Сообщения: 384
Статус: Участник
ОС: Debian GNU/Linux

Первый шаг в программировании на С

Сообщение promov »

Собственно говоря, это не моя программа, а из учебника, Она думаю, всем известна

#include <stdio.h>

main ()
{
printf ("hello, world");
}

Компилируется без собщений (читай: без ошибок). Следовательно,"в результате будет создан выполняемый файл a.out. Теперь этот файл можно запустить на выполнение командой a.out"

Пишу такую команду, выдаётся сообщение, что её нет в фонде. Что делать-то? Я прямо в растерянности.
Операционная система называется Debian GNU/Linux. Заранее спасибо.

P.S. Сдаётся мне, что моя операционная система не есть точная копия Unix, для которой книжка написана... В общем, расчитываю на вашу помощь.
Зачем хорёк пошел в ларёк, зачем барсук полез на сук...
Мораль легко уразуметь: зачем на бал пришёл медведь?
Спасибо сказали:
spielmann
Сообщения: 105
ОС: Linux

Re: Первый шаг в программировании на С

Сообщение spielmann »

./a.out
Спасибо сказали:
Аватара пользователя
Voice
Сообщения: 1073
Статус: столлманист
ОС: Debian GNU/Linux

Re: Первый шаг в программировании на С

Сообщение Voice »

promov, именно потому что Дебиан есть Юникс ваша команда не работает :)
В Юниксе в целях безопасности программы в текущем каталоге не ищутся, а только в каталогах с переменной окружения $PATH.
Иначе мог бы кто-то вам в дом. дирикторию кинуть какой-то скрипт ужасный и обозвать его cd, и он бы выполнялся при вводе команды cd, вместо стандартной cd.
"И может собственных Платонов и быстрых разумом Невтонов российская земля рождать."
М. В. Ломоносов
Спасибо сказали:
promov
Сообщения: 384
Статус: Участник
ОС: Debian GNU/Linux

Re: Первый шаг в программировании на С

Сообщение promov »

spielmann писал(а):
02.09.2007 11:01
./a.out

Большое спасибо. Сработало.
Зачем хорёк пошел в ларёк, зачем барсук полез на сук...
Мораль легко уразуметь: зачем на бал пришёл медведь?
Спасибо сказали:
promov
Сообщения: 384
Статус: Участник
ОС: Debian GNU/Linux

Re: Первый шаг в программировании на С

Сообщение promov »

Voice писал(а):
02.09.2007 11:06
promov, именно потому что Дебиан есть Юникс ваша команда не работает :)
В Юниксе в целях безопасности программы в текущем каталоге не ищутся, а только в каталогах с переменной окружения $PATH.
Иначе мог бы кто-то вам в дом. дирикторию кинуть какой-то скрипт ужасный и обозвать его cd, и он бы выполнялся при вводе команды cd, вместо стандартной cd.

Уважаемый Voice! Из ваших слов я понял одно (надеюсь, суть)- что бы я не написал, файл не запустится, нужно выполнить какие-то хитрые процедуры- только тогда можно расчитывать на запускание. Однако же, файл запускается при задании команды ./a.out.

Если мой вопрос покажется кому-нибудь глупым, просто проигнорируйте его- (он мне не очень важен, мне сейчас главное, чтобы заработало).
Зачем хорёк пошел в ларёк, зачем барсук полез на сук...
Мораль легко уразуметь: зачем на бал пришёл медведь?
Спасибо сказали:
Аватара пользователя
sergeyvp
Сообщения: 807
ОС: ubuntu

Re: Первый шаг в программировании на С

Сообщение sergeyvp »

promov писал(а):
02.09.2007 11:44
Если мой вопрос покажется кому-нибудь глупым, просто проигнорируйте его- (он мне не очень важен, мне сейчас главное, чтобы заработало).

Всё достаточно просто, для того чтобы выполнить исполняемый файл системе нужно сказать что он находится в текущем каталоге а не в системном, именно это и делается с помощью приставки ./
Если перед исполняемым файлом не указан полный или сокращенный путь к этому файлу то система будет искать его в каталогах которые указаны в переменной PATH, её содержимое можно посмотреть набрав команду:
echo $PATH
Спасибо сказали:
promov
Сообщения: 384
Статус: Участник
ОС: Debian GNU/Linux

Re: Первый шаг в программировании на С

Сообщение promov »

Спасибо, сориентировали. Ппробую дальше сам.
Зачем хорёк пошел в ларёк, зачем барсук полез на сук...
Мораль легко уразуметь: зачем на бал пришёл медведь?
Спасибо сказали:
Аватара пользователя
Beren
Сообщения: 702
ОС: Gentoo

Re: Первый шаг в программировании на С

Сообщение Beren »

spielmann,
./a.out

Точка перед названием, как я понимаю, означает, что файл скрытый. Как можно его сделать не скрытым и зачем линукс скрывает скомпилированный исполняемый файл?
Дорогу осилит идущий
Спасибо сказали:
Аватара пользователя
kernel_mode
Сообщения: 347
Статус: infinity++
ОС: Gentoo(desktop)/Arch(laptop)

Re: Первый шаг в программировании на С

Сообщение kernel_mode »

Encou писал(а):
23.09.2007 16:56
spielmann,
./a.out

Точка перед названием, как я понимаю, означает, что файл скрытый. Как можно его сделать не скрытым и зачем линукс скрывает скомпилированный исполняемый файл?


Нет, конструкция ./ обозначает текущий каталог.
Спасибо сказали:
Аватара пользователя
Beren
Сообщения: 702
ОС: Gentoo

Re: Первый шаг в программировании на С

Сообщение Beren »

DEATH,
ясно, спасибо.
Дорогу осилит идущий
Спасибо сказали:
Аватара пользователя
deninok
Сообщения: 585
Статус: Программист С++
ОС: Debian GNU/Linux

Re: Первый шаг в программировании на С

Сообщение deninok »

Код: Выделить всё

#include <stdio.h>

main ()
{
printf ("hello, world");
}

Друзья, что за привычка игнорировать стандарт языка? Это некорректный пример! Функция main() должна возвращать значения типа int во внешний контекст. Правильно писать так:

Код: Выделить всё

#include <stdio.h>

int main ()
{
printf ("hello, world");
return 0;
}


Кто-то скажет, что это мелочь, однако стандарт (раз уж он есть) нужно уважать...
Спасибо сказали:
Аватара пользователя
Славик
Сообщения: 159
ОС: AltLinux2.4 master

Re: Первый шаг в программировании на С

Сообщение Славик »

Encou писал(а):
23.09.2007 16:56
spielmann,
./a.out

Точка перед названием, как я понимаю, означает, что файл скрытый. Как можно его сделать не скрытым и зачем линукс скрывает скомпилированный исполняемый файл?

точка перед слешем (как первый символ полного имени) означает текущий каталог, две точки - родительский каталог. Исполняемый файл компиллятор не скрывает. Команда ls покажет его вместе с остальным содержимым каталога.
Познание бесконечности требует бесконечного времени.
А. и Б. Стругацкие
Понедельник начинается в субботу
Спасибо сказали:
Аватара пользователя
Aectann
Бывший модератор
Сообщения: 3491
Статус: ...
ОС: OS X, GNU_и_не_только/Linux

Re: Первый шаг в программировании на С

Сообщение Aectann »

deninok писал(а):
24.09.2007 10:37
Кто-то скажет, что это мелочь, однако стандарт (раз уж он есть) нужно уважать...

А вы уверены, что это стандарт C, а не С++?
My god... it's full of stars!...
Спасибо сказали:
sergio
Сообщения: 436
Статус: Интересующийся новичок
ОС: Debian GNU/Linux 4 & 5

Re: Первый шаг в программировании на С

Сообщение sergio »

Aectann писал(а):
24.09.2007 21:57
deninok писал(а):
24.09.2007 10:37
Кто-то скажет, что это мелочь, однако стандарт (раз уж он есть) нужно уважать...

А вы уверены, что это стандарт C, а не С++?

В обоих стандартах мэйн должна возвращать инт в систему. :happy:
Стандартные прототипы:
int main() ;
int main(int argc, char* argv[]) ;
остальное - либо расширения, как
int main(int argc, char* argv[], char** envv) ;
или от лукавого. :happy:
Debian GNU/Linux 4 -- AMD Athlon64 3000+ / Asus 7600GS -- Gnome
Debian GNU/Linux 5 -- Dell (Vostro) 500 (Celeron M560 / iGM965) -- Gnome
Спасибо сказали:
Аватара пользователя
Liksys
Сообщения: 2910

Re: Первый шаг в программировании на С

Сообщение Liksys »

В C функция main() может не возвращать ничего.
В C++ main() может иметь возвращаемый тип int, но в конце функции может не стоять return 0;, тогда подразумевается, что возвращается ноль, это принято только для main() и только в C++.

А на C самая короткая программа может вообще выглядеть так:

Код: Выделить всё

main(){}

Будет компилироваться и завершаться рандомным значением.
Спасибо сказали: