Автор Тема: Простенький вопрос по C  (Прочитано 3905 раз)

ne_spit

  • Гость
Простенький вопрос по C
« : 22.03.2010 17:51:49 »
Ни в одном учебнике так и не нашёл, как сделать так что-бы при компиляции исходной программы:
cc primer.cфайл для запуска отличался бы от стандартного:
~/a.outА то несколько различных программ и все пишутся в один файл:(
Было бы неплохо если бы не
~/a.outа скажем было бы
~/primer.outИ так бы с каждой программкой.

Оффлайн bormant

  • Завсегдатай
  • *
  • Сообщений: 358
Re: Простенький вопрос по C
« Ответ #1 : 22.03.2010 18:22:01 »
cc primer.c -o primer

'man сс' да 'man make' в помощь.

Оффлайн Merblud

  • Давно тут
  • **
  • Сообщений: 460
Re: Простенький вопрос по C
« Ответ #2 : 22.03.2010 21:30:24 »
Сейчас учебник то по C днем с огнем не найдешь.

Онлайн ruslandh

  • Поспешай не торопясь !
  • Модератор глобальный
  • *****
  • Сообщений: 32 251
  • Учиться .... Телепатами не рождаются, ими ....
    • Email
Re: Простенький вопрос по C
« Ответ #3 : 22.03.2010 22:31:57 »
gcc --help
...
  -o <file>                Place the output into <file>
...

ne_spit

  • Гость
Re: Простенький вопрос по C
« Ответ #4 : 22.03.2010 23:24:19 »
cc primer.c -o primer

'man сс' да 'man make' в помощь.
bash-3.2$ man cc
No manual entry for cc
причём здесь make я не понял, а за
cc primer.c  -o primerCпасибо большое! Выручил! Работает :)

ruslandh
Причём здесь gcc честно сказать - не понял, но мысль ухватил и действительно
cc --help
...
  -o <file>                Place the output into <file>
...
Вот как иногда бывает то. Перечитал кучу статей, гуглил несколько дней - а на самом деле всё было под рукой.
Спасибо.

Merblud
Цитировать
Сейчас учебник то по C днем с огнем не найдешь.
Может быть и так - не знаю. Я лично нашёл здесь - http://www.intuit.ru/department/pl/c/

И ещё малюсенький вопросик

Есть такая программка
main()
{  printf("\t\tПреобразование температур\n");/*Заголовок с двумя табуляциями*/
   int fahr; /*переменная целочисленная*/
   for (fahr = 0; fahr <= 100; fahr = fahr + 10)/*тело цикла(1.начальное значение, 2 - условие выполнения, действие)*/
 printf("%4d %6.1f\n", fahr, (5.0/9.0)*(fahr-32.0));
 }
Здесь вывод идёт начиная от 0 в сторону увеличения, а как сделать что-бы вывод шёл от 100 и в сторону уменьшения?

« Последнее редактирование: 22.03.2010 23:33:51 от ne_spit »

Онлайн ruslandh

  • Поспешай не торопясь !
  • Модератор глобальный
  • *****
  • Сообщений: 32 251
  • Учиться .... Телепатами не рождаются, ими ....
    • Email
Re: Простенький вопрос по C
« Ответ #5 : 22.03.2010 23:33:40 »
for (fahr = 100; fahr >= 0; fahr -= 10)


ne_spit

  • Гость
Re: Простенький вопрос по C
« Ответ #6 : 22.03.2010 23:39:42 »
for (fahr = 100; fahr >= 0; fahr -= 10)


Вот оно оказывается в чём дело, я делал то же самое но в при задании шага в 10 ставил знак минус (-)
И поэтому ничего не получалось.
Спасибо.

Правда по этому способу почему то начали появляться ошибки
bash-3.2$ cc cels2.c -o cels2
cels2.c: In function ‘main’:
cels2.c:2: warning: incompatible implicit declaration of built-in function ‘printf’
Ну да ладно - главное - работает! :)

ne_spit

  • Гость
Re: Простенький вопрос по C
« Ответ #7 : 23.03.2010 01:13:27 »
Сейчас учебник то по C днем с огнем не найдешь.
Вот ещё - http://lib.kruzzz.com/1-41/c.html

Оффлайн bormant

  • Завсегдатай
  • *
  • Сообщений: 358
Re: Простенький вопрос по C
« Ответ #8 : 23.03.2010 10:04:27 »
make позволяет единожды написать Makefile и выполнять пересборку единообразно -- командой make, пересобирая только изменённые части и не боясь упустить какой-либо из параметров при сборке.

Оффлайн andrew_b

  • Завсегдатай
  • *
  • Сообщений: 535
Re: Простенький вопрос по C
« Ответ #9 : 23.03.2010 11:50:27 »
Правда по этому способу почему то начали появляться ошибки
Потому что компилятору неизвестна функция printf(). Сделайте
#include <stdio.h>

ne_spit

  • Гость
Re: Простенький вопрос по C
« Ответ #10 : 23.03.2010 21:49:48 »
Правда по этому способу почему то начали появляться ошибки
Потому что компилятору неизвестна функция printf(). Сделайте
#include <stdio.h>
Довольно странный язык Си, получается что конструкция
printf("\t\tПреобразование температур\n");равнозначна конструкции
printf()Честно сказать - я не понял, так как в первом случае в скобках есть выражение, в частности - заголовок
Но при включении в исходник
#include <stdio.h>исполняемый файл получается без всяких ошибок, в частности
bash-3.2$  cc cels.c -o cels2
bash-3.2$ ~/cels2
                Преобразование температур
   0  -17.8
  10  -12.2
  20   -6.7
  30   -1.1
  40    4.4
  50   10.0
  60   15.6
  70   21.1
  80   26.7
  90   32.2
 100   37.8
bash-3.2$
Очень любопытно, если не сказать больше - во всяком случае спасибо.


Оффлайн andrew_b

  • Завсегдатай
  • *
  • Сообщений: 535
Re: Простенький вопрос по C
« Ответ #11 : 24.03.2010 08:24:44 »
Довольно странный язык Си, получается что конструкция
printf("\t\tПреобразование температур\n");равнозначна конструкции
printf()
С чего вы взяли?

ne_spit

  • Гость
Re: Простенький вопрос по C
« Ответ #12 : 24.03.2010 09:22:15 »

С чего вы взяли?

Потому что в исходном тексте программы нет

Цитировать
printf()


main()
{  printf("\t\tПреобразование температур\n");/*Заголовок с двумя табуляциями*/
   int fahr; /*переменная целочисленная*/
   for (fahr = 0; fahr <= 100; fahr = fahr + 10)/*тело цикла(1.начальное значение, 2 - условие выполнения, действие)*/
 printf("%4d %6.1f\n", fahr, (5.0/9.0)*(fahr-32.0));
 }

А есть как видно
printf("\t\tПреобразование температур\n");/*Заголовок с двумя табуляциями*/
printf("%4d %6.1f\n", fahr, (5.0/9.0)*(fahr-32.0));

И из этого получается можно сделать вывод, что если
Цитировать
Потому что компилятору неизвестна функция printf()

то получается и printf() и printf("%4d %6.1f\n", fahr, (5.0/9.0)*(fahr-32.0)) между собой совершенно идентичны, так как без включения

#include <stdio.h>При компиляции выходят ошибки
cels2.c: In function ‘main’:
cels2.c:2: warning: incompatible implicit declaration of built-in function ‘printf’

А вот если сделать

#include <stdio.h>
то ошибок - нет.


Оффлайн bormant

  • Завсегдатай
  • *
  • Сообщений: 358
Re: Простенький вопрос по C
« Ответ #13 : 24.03.2010 10:08:15 »
warning -- это не ошибка, это предупреждение.
В данном конкретном случае, предупреждение о том, что printf() не декларирована, компилятор не может проверить, правильно ли Вы используете функцию (соответствие фактических параметров списку формальных), но это не фатально. Поскольку по умолчанию в C стэк очищается вызывающим, никакой проблемы для сборки и выполнения написанного нет.

Оффлайн andrew_b

  • Завсегдатай
  • *
  • Сообщений: 535
Re: Простенький вопрос по C
« Ответ #14 : 24.03.2010 11:07:04 »
И из этого получается можно сделать вывод,
Да ничего не получается. Скобки -- это такое общепринятое обозначение, позволяющее сразу понять, что речь идёт о функции. Например, f -- это переменная или константа, а f() -- функция.  Всё, ничего более.