Вопросы по учебнику С... (Плавно из одного вопроса получилось несколько)

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

Аватара пользователя
elide
Бывший модератор
Сообщения: 2421
Статус: Übermensch
ОС: лялих

Re: Вопросы по учебнику С...

Сообщение elide »

вот и я говорю о принципиальной возможности.
машина Тьюринга - функционально полна. а brainfuck?
слава роботам!
Спасибо сказали:
Аватара пользователя
aLexx programmer
Сообщения: 985
Статус: Турук-Макто
ОС: Gentoo -> Ubuntu

Re: Вопросы по учебнику С...

Сообщение aLexx programmer »

(elide @ Jun 11 2006, в 11:06) писал(а):машина Тьюринга - функционально полна. а brainfuck?

А brainfuck функционально является программистским приколом, не более того :rolleyes:
Спасибо сказали:
Аватара пользователя
Boron
Сообщения: 197

Re: Вопросы по учебнику С...

Сообщение Boron »

to Boron:
Тот кусочек кода, что я написал, не "правильное" оформление а один из стилей оформления (Да и то я его немного под себя подогнал smile.gif ). Так что лучше всего найти документ именно по стилям и определится с тем какой Вам больше нравится и удобно читается.

Извиняюсь - из-за экзаменов не до форума было. Ок, я посмотрю :). Еще раз спасибо за совет!
Спасибо сказали:
Аватара пользователя
ety
Сообщения: 358
ОС: Linux

Re: Вопросы по учебнику С...

Сообщение ety »

fatboy писал(а):
09.06.2006 22:45
Тот кусочек кода, что я написал, не "правильное" оформление а один из стилей оформления (Да и то я его немного под себя подогнал :) ). Так что лучше всего найти документ именно по стилям и определится с тем какой Вам больше нравится и удобно читается.

в принципе ты все правильно показал, ибо это практически оффициальный стиль используемый на никсах последнии несколько десятков лет, есть правда еще стиль M$, но я согласен с /usr/src/linux/Documentation/CodingStyle, его придумали явно больные на голову.
Образование - это вовсе не то, чему человека учили, а то, чему он научился.
-----
Время, необходимое на компиляцию пакета обратно пропорционально его полезности и важности его наличия в системе.
Спасибо сказали:
PbIXapYx20under20nix
Сообщения: 7
ОС: some *NIX --force

Re: Вопросы по учебнику С...

Сообщение PbIXapYx20under20nix »

Можно хоть на машине Тьюринга написать рендеринг. :D

Кто такое сделает и мне покажет, лично вышлю за свой счёт 20 литров самарского пива с "Дна"(Оффмагаз при местном пивзаводе).
В любую точку России.
Спасибо сказали:
Аватара пользователя
Denjs
Сообщения: 1685
ОС: SuSe 10.2

Re: Вопросы по учебнику С...

Сообщение Denjs »

Высылайте спецификации оборудования, среды (аппаратно-программной) на котором вы собираетесь гонять вашу машину тьюнинга )
ну и там ТЗ (по госту), П2, П4. (все по ГОСТу)
сделаем все в лучшем виде ;)

И предоплату - у нас как раз нет проекта ;)
QDroid - Среда исполнения и фреймворк для QtScript.
OTPD - Открытые драйвера промышленных принтеров чеков и этикеток (кроссплатформенная подсистема печати).
Спасибо сказали:
Аватара пользователя
deninok
Сообщения: 585
Статус: Программист С++
ОС: Debian GNU/Linux

Re: Вопросы по учебнику С...

Сообщение deninok »

Boron писал(а):
08.06.2006 00:54
Столкнулся с проблемой
#include <stdio.h>
/* печать таблицы температур по фаренгейту и цельсию для fahr = 0,20,...,300*/

main()
{
...
fahr=fahr+step}
}


Ваша главная проблема - учебник по С, откуда вы взяли этот пример. Строго говоря, в данном коде допущены 2 взаимосвязанные ошибки: не указан тип возвращаемого функцией main() значения, а также отсутствует инструкция return в конце main().
Нужно писать так:

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

int main()
{
...
return 0;
}

И тот факт, что авторы многих книг по С используют в своих примерах конструкции наподобие приведённой вами, лишь идёт в минус таким авторам.

P.S. К сожалению, компилятор промолчит, если вы используете флаги по умолчанию. Необходимо настроить компилятор на строгое соответствие ISO С, тогда он не должен пропускать таких ошибок.
Спасибо сказали:
Аватара пользователя
Олег777
Сообщения: 238
Статус: зануда
ОС: Чё?

Re: Вопросы по учебнику С...

Сообщение Олег777 »

Чтоб не открывать новых тем, без толку. Хочется сказать, примеры в книгах часто содержат кучу ошибок, учитывая что книги попадаются довольно древние и варезные.
Вот пример, тоже тут терзаю Кернигана, пример из книги

Код:

/* * kern5.c * * Copyright 2008 saturn 721 <saturn@zenwalk> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301, USA. */ #include <stdio.h> #define MAXLINE 1000 /* MAXIMUM INPUT LINE SIZE */ int main(int argc, char** argv) { int len; /* CURRENT LINE LENGTH */ int max; /* MAXIMUM LENGTH SEEN SO FAR */ char line[MAXLINE]; /* CURRENT INPUT LINE */ char save[MAXLINE]; /* LONGEST LINE, SAVED */ max = 0; while ((len = getlines(line, MAXLINE)) > 0) if (len > max) { max = len; copys(line, save); } if (max > 0) /* THERE WAS A LINE */ printf("%s", save); return 0; } getlines(s,lim) /* GET LINE INTO S,RETURN LENGTH */ int lim; char s[]; { int c, i; for(i=0; i < lim-1 && (c=getchar()) != EOF && c != '\n'; ++i) s[i] = c; if (c == '\n') { s[i] = c; ++i; } s[i] = '\0'; return(i); } copys(s1, s2) /* COPY S1 TO S2; ASSUME S2 BIG ENOUGH */ char s1[], s2[]; { int i; i = 0; while ((s2[i] = s1[i]) != '\0') ++i; }

Я конечно, кой что подправил, но компилятор, разве что, слюной не брызжет, хотя программулька работает
kern5.c: В функции ‘main’
kern5.c:34: предупреждение: implicit declaration of function ‘getlines’
kern5.c:38: предупреждение: implicit declaration of function ‘copys’
kern5.c: На верхнем уровне:
kern5.c:46: предупреждение: по умолчанию возвращаемый тип функции - ‘int’
kern5.c:62: предупреждение: по умолчанию возвращаемый тип функции - ‘int’
kern5.c: В функции ‘copys’
kern5.c:68: предупреждение: control reaches end of non-void function
Спички - детям!
Спасибо сказали:
astronom
Сообщения: 151
ОС: Debian

Re: Вопросы по учебнику С...

Сообщение astronom »

Ошибки в примерах - весьма продуктивный метод обучения. (конечно, если предварительно указать, что такие ошибки могут быть в примере) :drinks:
Параллельные извилины не пересекаются ...
Спасибо сказали:
Аватара пользователя
кодировщик
Сообщения: 974
Статус: зарёган в пятницу 13
ОС: Linux

Re: Вопросы по учебнику С...

Сообщение кодировщик »

а вот я сегодня встретил такое

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

#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;string.h&gt;
#include &lt;fcntl.h&gt;
#include &lt;errno.h&gt;

может кто-то объяснит что это за написание?!
Спасибо сказали:
Аватара пользователя
Женя Подсыпальников
Сообщения: 482

Re: Вопросы по учебнику С...

Сообщение Женя Подсыпальников »

Олег777 писал(а):
15.12.2008 14:07
Хочется сказать, примеры в книгах часто содержат кучу ошибок, учитывая что книги попадаются довольно древние и варезные.


Не понятно, как в книге...

Тут - чья-то обработка 2008 года :)

По-моему, в книге - main была-таки замыкающей... :D

кодировщик писал(а):
15.12.2008 14:24
а вот я сегодня встретил такое

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

#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;string.h&gt;
#include &lt;fcntl.h&gt;
#include &lt;errno.h&gt;

может кто-то объяснит что это за написание?!


Это - какой-то редактор знаки меньше-больше так понял... :)
Пойдём на рыбалку !
Спасибо сказали:
Аватара пользователя
Олег777
Сообщения: 238
Статус: зануда
ОС: Чё?

Re: Вопросы по учебнику С...

Сообщение Олег777 »

Ага, main в конец и int перед copys и getlines и return 0; в copys
Спички - детям!
Спасибо сказали:
Аватара пользователя
кодировщик
Сообщения: 974
Статус: зарёган в пятницу 13
ОС: Linux

Re: Вопросы по учебнику С...

Сообщение кодировщик »

Женя Подсыпальников писал(а):
15.12.2008 14:27
кодировщик писал(а):
15.12.2008 14:24
а вот я сегодня встретил такое

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

#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;string.h&gt;
#include &lt;fcntl.h&gt;
#include &lt;errno.h&gt;

может кто-то объяснит что это за написание?!


Это - какой-то редактор знаки меньше-больше так понял... :)

Так не понятно, по ходу оно так и должно быть, но компилятор на это матюкается

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

1.c:17:10: error: #include expects "FILENAME" or <FILENAME>
1.c:18:10: error: #include expects "FILENAME" or <FILENAME>
1.c:19:10: error: #include expects "FILENAME" or <FILENAME>
1.c:20:10: error: #include expects "FILENAME" or <FILENAME>
Спасибо сказали:
Аватара пользователя
Женя Подсыпальников
Сообщения: 482

Re: Вопросы по учебнику С...

Сообщение Женя Подсыпальников »

Олег777 писал(а):
15.12.2008 14:38
Ага, main в конец и int перед copys и getlines и остается только.
kern5.c:52: предупреждение: control reaches end of non-void function

по поводу copys


По передку copys - void , наверна, хватит... :)

кодировщик писал(а):
15.12.2008 14:40
Так не понятно...


Можно попробывать подправить на #include <stdio.h>, и.т.д. ... :)
Пойдём на рыбалку !
Спасибо сказали:
Аватара пользователя
Denjs
Сообщения: 1685
ОС: SuSe 10.2

Re: Вопросы по учебнику С...

Сообщение Denjs »

PbIXapYx20under20nix писал(а):
15.12.2008 02:13
Можно хоть на машине Тьюринга написать рендеринг. :D

Кто такое сделает и мне покажет, лично вышлю за свой счёт 20 литров самарского пива с "Дна"(Оффмагаз при местном пивзаводе).
В любую точку России.

Надо как минимум определиться с организацией видео-памяти) и алгоритмами рендеринга.

Задача кажется нерешаемой потому что слишком сложна - для начала надо создать структуры для работы со сложными структурами (массивы например) и другие примитивные операции а потом их объединять в алгоритм рендеринга... аналогичная задача - имхо - это написать рендер на ассемблере.
Возможно я конечно что-то путаю, но теоретическая возможность никак не отрицается - хотя бы потому что обычные микросхемы начинаются обычной логики и/или/нет.

Простой процессор в некотором смысле - это машина Тьюринга и есть, только с очень сложным числом состояний. У оного тоже есть набор состояний - регстры, алфавит - ассемблер, записанный в ленту (правда конечную) - память, по которой процессор и ползает.

Соответственно, если отталкиваться от машины Тьюринга, сначала решается задача разработки простого ассемблера и "процессора" - т.е. алфавита и набора состояний для машины Тьюринга.
Фактически, подозреваю, на этом этапе придется создать макро-графический язык, собирающий "в одно" наборы состояний которые реализуют некую базовую макрофункциональность (группы узлов графа по функциональному назначению) ... т.е. в один блок например объединяются состояния реализующие одну ассемблерную инструкцию. причем как я понимаю, число состояний машины как я понимаю, растет пропорционально размеру алфавита... (Оценочно, инструкция перехода "JMP N" - переход вперед на N шагов где n 8-и битное число ячеек, потребует примерно 256-1024 состояния и/или правил переходов... - пропорционально размеру (квадрату размера?) алфавита, если не придумать какой трюк... например позволить машине оставлять ячейку без перезаписи содержимого и просто перемещаться... )
потом из этих макро-графических блоков строится единый граф, и загружается в машину Тьюринга, должны получить виртуальный аналог процессора)

Это ключевое) возможно я не слишком погрузился в тему, но пока я не вижу чего-то принципиально невозможного.
В принципе, для начала наверное, достаточно перехода, сравнения, условного перехода и базовых математических операций.
В результате мы получим что-то отдаленно напоминающее примерно шестнадцатую часть от процессора Z80 (или i8080) (оценочно).
Далее - дело техники. пишется простой компилятор ассемблера, потомна нем пишется компилятор простого языка высокого уровня, на нем реализуются работа со сложными структурами и т.д. - примерно все так, как бы вы работали создавая "блок для аппаратного рендеринга из транзисторов" :)

Полагаю, мы сойдемся в том, какой объем работы надо проделать что бы показать рендеринг )))
т.е. "мы можем, но за предоплату")
___________________
UPD: ещё похоже, что у просто может не хватить вычислительной мощности машины или размера памяти для обработки графа состояний. но за ваши деньги мы купим соответсвующее оборудование)
QDroid - Среда исполнения и фреймворк для QtScript.
OTPD - Открытые драйвера промышленных принтеров чеков и этикеток (кроссплатформенная подсистема печати).
Спасибо сказали:
astronom
Сообщения: 151
ОС: Debian

Re: Вопросы по учебнику С...

Сообщение astronom »

кодировщик писал(а):
15.12.2008 14:40
Так не понятно, по ходу оно так и должно быть, но компилятор на это матюкается

матюкается? И правильно делает. Может быть
либо

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

#include <имя_файла>

, либо

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

#include "имя_файла"


В данном случае, первый вариант.
Параллельные извилины не пересекаются ...
Спасибо сказали:
skillergti
Сообщения: 34
ОС: slackware

Re: Вопросы по учебнику С...

Сообщение skillergti »

некроманты )
Спасибо сказали:
MiK13
Сообщения: 1307
ОС: Linux Debian

Re: Вопросы по учебнику С...

Сообщение MiK13 »

кодировщик писал(а):
15.12.2008 14:24
а вот я сегодня встретил такое

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

#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;string.h&gt;
#include &lt;fcntl.h&gt;
#include &lt;errno.h&gt;

может кто-то объяснит что это за написание?!

Здесь всё правильно написано. Именно так и надо писать, если надо, чтобы этот текст корректно отобразился в каком-нибудь html-браузере. Т.е. в html знак < открывает тэг, а знак > его закрывает. Поэтому, чтобы эти знаки корректно отобразились в html странице используется для них (и для кучи других) подобная кодировка (для > не обязательно)
Почему так получилось -- видимо пример был в каком-то html файле и кто-то взял и решил прямым копипастом перенести его в програииу. Причём не из изображения на экране браузера, а прямо из исходного файла.
Спасибо сказали:
Аватара пользователя
кодировщик
Сообщения: 974
Статус: зарёган в пятницу 13
ОС: Linux

Re: Вопросы по учебнику С...

Сообщение кодировщик »

MiK13 писал(а):
15.12.2008 20:51
кодировщик писал(а):
15.12.2008 14:24
а вот я сегодня встретил такое

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

#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;string.h&gt;
#include &lt;fcntl.h&gt;
#include &lt;errno.h&gt;

может кто-то объяснит что это за написание?!

Здесь всё правильно написано. Именно так и надо писать, если надо, чтобы этот текст корректно отобразился в каком-нибудь html-браузере. Т.е. в html знак < открывает тэг, а знак > его закрывает. Поэтому, чтобы эти знаки корректно отобразились в html странице используется для них (и для кучи других) подобная кодировка (для > не обязательно)
Почему так получилось -- видимо пример был в каком-то html файле и кто-то взял и решил прямым копипастом перенести его в програииу. Причём не из изображения на экране браузера, а прямо из исходного файла.

Да спасибо. я уже потом разобрался.Действительно тупо скопипастили.
Спасибо сказали:
PbIXapYx20under20nix
Сообщения: 7
ОС: some *NIX --force

Re: Вопросы по учебнику С...

Сообщение PbIXapYx20under20nix »

Denjs писал(а):
15.12.2008 16:40
PbIXapYx20under20nix писал(а):
15.12.2008 02:13
Можно хоть на машине Тьюринга написать рендеринг. :D

Кто такое сделает и мне покажет, лично вышлю за свой счёт 20 литров самарского пива с "Дна"(Оффмагаз при местном пивзаводе).
В любую точку России.

UPD: ещё похоже, что у просто может не хватить вычислительной мощности машины или размера памяти для обработки графа состояний. но за ваши деньги мы купим соответсвующее оборудование)


Вот про граф состояний.. Трашно представить сколько там будет узлов, точнее даже путей обхода. Да и если он будет равновесный(? может не правильно выразился,под пивом) Короче если там ещё и будет учтён пропускная способность на рёбрах то структура при 1024 элементах займёт 1024^2, это как понял основная структура обхода состояний, то есть будет использоваться для обработки матриц, следовательно должно храниться в оперативке, на равне с массивами..

Могу предложить графическую станцию K-19\K-16 без тесла модуля у качестве полигона для обкатки, но по удалёнке и на время разработки ;) Только всё равно ресурсов мало будет.

Но мне кажется к этой проге нужно будет ещё делать интерфейс распределённого вычисления (типа Grid) и плодить его. Что бы через неделю его забанили по маркой мегазлостный DDoser.

А вообще мои цели использования этой проги свелись бы к разогреву жратвы на серваке. (запустил, понизил охлаждения и подгрел на нём кофе/чай/закуску)
Спасибо сказали:
Аватара пользователя
Denjs
Сообщения: 1685
ОС: SuSe 10.2

Re: Вопросы по учебнику С...

Сообщение Denjs »

Если в лоб - то да, так)
если подумать - то там правила или фактически многократно повторяются (например вводим новое состояние типа 8-и битный регистр - бац - и всех правил становится раз в 256 больше. но по сути одинаковых ))) ) или они будут генерироваться по заранее известному закону... - в общем их можно динамически генерировать по мере необходимости для заданной области графа.

Хотя я подозреваю вторую ленту машины Тьюринга и т.д. можно использовать что бы не плодить черезмерно граф состояний.
Только примеров нигде нету с несколькими лентами и так что бы между лентами можно было вести обмен данными))).
QDroid - Среда исполнения и фреймворк для QtScript.
OTPD - Открытые драйвера промышленных принтеров чеков и этикеток (кроссплатформенная подсистема печати).
Спасибо сказали:
Аватара пользователя
grouzen
Сообщения: 120
ОС: LFS, slackware

Re: Вопросы по учебнику С...

Сообщение grouzen »

deninok писал(а):
15.12.2008 09:50
Boron писал(а):
08.06.2006 00:54
Столкнулся с проблемой
#include <stdio.h>
/* печать таблицы температур по фаренгейту и цельсию для fahr = 0,20,...,300*/

main()
{
...
fahr=fahr+step}
}


Ваша главная проблема - учебник по С, откуда вы взяли этот пример. Строго говоря, в данном коде допущены 2 взаимосвязанные ошибки: не указан тип возвращаемого функцией main() значения, а также отсутствует инструкция return в конце main().
Нужно писать так:

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

int main()
{
...
return 0;
}

И тот факт, что авторы многих книг по С используют в своих примерах конструкции наподобие приведённой вами, лишь идёт в минус таким авторам.

P.S. К сожалению, компилятор промолчит, если вы используете флаги по умолчанию. Необходимо настроить компилятор на строгое соответствие ISO С, тогда он не должен пропускать таких ошибок.

Смешно конечно, но это K&R ... т.е. стандарт устарел и примеры из их книги желательно подгонять под с99
Спасибо сказали:
Аватара пользователя
AestheteAnimus
Сообщения: 135
ОС: FreeBSD 8.0-RELEASE amd64

Re: Вопросы по учебнику С...

Сообщение AestheteAnimus »

deninok писал(а):
15.12.2008 09:50

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

int main()
{
    ...
    return 0;
}

Ну если мы говорим о "строгом" соответствии стандарты, то тогда уж так:

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

int main(void)
{
    ...
    return 0;
}

Ибо это Си, а не С++

А вообще, сие гласит стандарт:
5.1.2.2.1 Program startup

The function called at program startup is named main. The implementation declares no
prototype for this function. It shall be defined with a return type of int and with no
parameters:

int main(void) { /* ... */ }

or with two parameters (referred to here as argc and argv, though any names may be
used, as they are local to the function in which they are declared):

int main(int argc, char *argv[]) { /* ... */ }

or equivalent; or in some other implementation-defined manner.
Спасибо сказали:
Аватара пользователя
deninok
Сообщения: 585
Статус: Программист С++
ОС: Debian GNU/Linux

Re: Вопросы по учебнику С...

Сообщение deninok »

grouzen писал(а):
17.12.2008 18:13
deninok писал(а):
15.12.2008 09:50

И тот факт, что авторы многих книг по С используют в своих примерах конструкции наподобие приведённой вами, лишь идёт в минус таким авторам.

Смешно конечно, но это K&R ... т.е. стандарт устарел и примеры из их книги желательно подгонять под с99

Ну да, я понимаю вас. Конечно же, во времена написания K&R стандартом и не пахло, а я, разумеется, имею в виду именно стандартный С, существующий уже почти 10 лет.
Спасибо сказали:
Аватара пользователя
deninok
Сообщения: 585
Статус: Программист С++
ОС: Debian GNU/Linux

Re: Вопросы по учебнику С...

Сообщение deninok »

AestheteAnimus писал(а):
17.12.2008 19:18
А вообще, сие гласит стандарт:
5.1.2.2.1 Program startup

The function called at program startup is named main. The implementation declares no
prototype for this function. It shall be defined with a return type of int and with no
parameters:

int main(void) { /* ... */ }

or with two parameters (referred to here as argc and argv, though any names may be
used, as they are local to the function in which they are declared):

int main(int argc, char *argv[]) { /* ... */ }

or equivalent; or in some other implementation-defined manner.


Ну, если уж быть совсем педантичным, то необходимо вспомнить, что в стандарте (по крайней мере, в С++-стандарте) сказано, что если в конце фукции main() не будет инструкции return, то эффект будет таким же, как если бы там была инструкция return 0.
Правда от компилятора к компилятору это не всегда одинаково срабатывает. Если опустить инструкцию return 0 в конце main(), то некоторые компиляторы свободно это пропускают, другие выдают ошибку.
Я считаю, что писать return 0 в конце main() необходимо всегда, потому что это логично: зачем указывать тип возвращаемого функцией значения, если в конце её тела явно ничего не возвращается?
Спасибо сказали:
Аватара пользователя
AestheteAnimus
Сообщения: 135
ОС: FreeBSD 8.0-RELEASE amd64

Re: Вопросы по учебнику С...

Сообщение AestheteAnimus »

deninok писал(а):
18.12.2008 09:01
я, разумеется, имею в виду именно стандартный С, существующий уже почти 10 лет.

Стандарт существует уже почти 20 лет :tongue:

deninok писал(а):
18.12.2008 09:14
Правда от компилятора к компилятору это не всегда одинаково срабатывает. Если опустить инструкцию return 0 в конце main(), то некоторые компиляторы свободно это пропускают, другие выдают ошибку.
Я считаю, что писать return 0 в конце main() необходимо всегда, потому что это логично: зачем указывать тип возвращаемого функцией значения, если в конце её тела явно ничего не возвращается?

Хм... у меня ни разу не было ошибки при этом, только варнинги. А вообще согласен, return стоит написать хотябы для наглядности ;)
Спасибо сказали:
Аватара пользователя
deninok
Сообщения: 585
Статус: Программист С++
ОС: Debian GNU/Linux

Re: Вопросы по учебнику С...

Сообщение deninok »

AestheteAnimus писал(а):
18.12.2008 15:08
deninok писал(а):
18.12.2008 09:01
я, разумеется, имею в виду именно стандартный С, существующий уже почти 10 лет.

Стандарт существует уже почти 20 лет :tongue:

Да, прошу прощения. Я имел в виду С99, хотя был ведь и С89...

AestheteAnimus писал(а):
18.12.2008 15:08
deninok писал(а):
18.12.2008 09:14
Правда от компилятора к компилятору это не всегда одинаково срабатывает. Если опустить инструкцию return 0 в конце main(), то некоторые компиляторы свободно это пропускают, другие выдают ошибку.
Я считаю, что писать return 0 в конце main() необходимо всегда, потому что это логично: зачем указывать тип возвращаемого функцией значения, если в конце её тела явно ничего не возвращается?

Хм... у меня ни разу не было ошибки при этом, только варнинги. А вообще согласен, return стоит написать хотябы для наглядности ;)

Я проверял на разных версиях компилятора GCC. Иногда ошибки были, но чаще предупреждения.
Спасибо сказали:
astronom
Сообщения: 151
ОС: Debian

Re: Вопросы по учебнику С...

Сообщение astronom »

grouzen писал(а):
17.12.2008 18:13
Смешно конечно, но это K&R ... т.е. стандарт устарел и примеры из их книги желательно подгонять под с99

Интересно, но. даже во втором издании (переводном, вышедшем в этом году) это не исправлено, даже комментария редактора нет. :mellow:
С другой стороны, можно дочитать до раздела 1.7 "Функции", в котором объясняется роль return и после которого этот оператор встречается во всех листингах. ;) Так, что величие K&R непоколебимо. :yes3:
Параллельные извилины не пересекаются ...
Спасибо сказали:
Аватара пользователя
Folderx
Сообщения: 296
ОС: fedora, mandriva

Re: Вопросы по учебнику С...

Сообщение Folderx »

("deninok") писал(а):Я проверял на разных версиях компилятора GCC. Иногда ошибки были, но чаще предупреждения.

потому что это не ошибки, когда void'овую пишешь ты же не ставишь return а что так ? потому что знаешь что там скобка делает return
в int'овой то же самое, и если там не ставится return 0 то это значит только что там принимается return любое_число
откуда возникла связь между стандартом C++ и стандартом C ?
можешь объяснить как какой-нибудь новый стандарт С++ отменяет принятый документально стандарт C ?
с чего вдруг стандарты C++ становятся стандартами C ?
почему в C++ главная функция программы называется так же как в C ?
Спасибо сказали:
Аватара пользователя
deninok
Сообщения: 585
Статус: Программист С++
ОС: Debian GNU/Linux

Re: Вопросы по учебнику С...

Сообщение deninok »

(Folderx) писал(а):откуда возникла связь между стандартом C++ и стандартом C ?

Оттуда же, откуда взялась связь между С++ и С: историческая данность.

(Folderx) писал(а):можешь объяснить как какой-нибудь новый стандарт С++ отменяет принятый документально стандарт C ?

Не совсем понял вопроса... Есть ряд положений в стандарте С++, не соответствующие стандарту С, и наоборот. Ведь на данный момент С и С++ - два разных языка.

(Folderx) писал(а):с чего вдруг стандарты C++ становятся стандартами C ?

Ещё более странный вопрос. Могу лишь сказать, что некоторые положения из стандарта С++ были добавлены в последний стандарт С (С99). Например, поддержка комментариев //.

(Folderx) писал(а):почему в C++ главная функция программы называется так же как в C ?

Опять-таки историческая данность.
Спасибо сказали: