Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вопросы по книге Кернигана (2-е изд.) 
V
    Опции темы
Compositum
Дата 26.11.2010, 11:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Senior developer
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 430
Регистрация: 6.1.2008
Где: Санкт-Петербург

Репутация: нет
Всего: 1



Добрый день. Читаю Брайна Кернигана "Язык программирования C" 2-е издание. По ходу чтения возникают некоторые вопросы.

1. Код копирования файлов:
Код

#include <stdio.h>

main ()
{
    c = getchar();

    while (c != EOF) {
        putchar(c);
        c = getchar();
    }
}

Непонятные моменты:
1.1. Я не понял, откуда именно  getchar считывает символы? Ведь источник (файл) не указан....
1.2. Куда именно putchar записывает символ? Ведь целевой файл/массив не указан...

Если символы считываются из консоли и записываются в консоль, то EOF однозначно не будет найден (насколько я понимаю).

2. Ещё один фрагмент кода:
Код

#include <stdio.h>

main ()
{
    ...
    return 0;    
}

Но ведь метод main определён не как int main(). Т.е. если перед функцией не указано, какой тип значения она должна возвращать, то по умолчанию подразумевается int?
Если "да", то почему нет ошибки, когда в методе main() отсутствует оператор return число?

PM   Вверх
bsa
Дата 26.11.2010, 11:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



1.1 и 1.2. когда запускается консольное приложение открыто 3 файла: stdin, stdout и stderr. Все функции ввода/вывода, у которых не указан файл явно работают с первыми двумя, но perror - с третьим. Первый - стандартный ввод (клавиатура), второе - стандартный вывод (экран), третье - стандартный вывод ошибок (тоже экран, но не буферизированный). Их можно изменять при запуске: program.exe <input.txt >output.txt 2> error.txt. Можно и так: program.exe < input.txt >output.txt 2>&1 (означает перенаправить вывод ошибок в стандартный вывод). А можно стандартный вывод одной программы использовать, как стандартный ввод другой (используется в основном в *nix, так как там все грамотно изначально задумано): ls | sort > sort-directory-content.txt, ls - сделать листинг текущего каталога, sort - сортировать стандартный ввод.

EOF - это Ctrl-Z + Enter в Windows или Ctrl-D в *nix.

2. функция (не метод! методы - это функции-члены класса) main() определена по стандарту как int main(). Да и вообще, язык Си предполагает, что если не указан тип возвращаемого значения, то он int.
Отсутствие предупреждения при отсутствии return в main - это обход стандартной ошибки программирования. return должен быть.
PM   Вверх
Compositum
Дата 26.11.2010, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Senior developer
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 430
Регистрация: 6.1.2008
Где: Санкт-Петербург

Репутация: нет
Всего: 1



спасибо.
PM   Вверх
mes
Дата 26.11.2010, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(bsa @  26.11.2010,  10:35 Найти цитируемый пост)
Отсутствие предупреждения при отсутствии return в main - это обход стандартной ошибки программирования. return должен быть. 

имхо, скорее это адаптация под стандартизированное правило C++.. 




--------------------
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0770 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.