19.12.2018, 11:41 [+3 UTC]
в нашей команде: 3 245 чел. | участники онлайн: 9 (рекорд: 20)

:: РЕГИСТРАЦИЯ

:: задать вопрос

:: все разделы

:: правила

:: новости

:: участники

:: доска почёта

:: форум

:: блоги

:: поиск

:: статистика

:: наш журнал

:: наши встречи

:: наша галерея

:: отзывы о нас

:: поддержка

:: руководство

Версия системы:
7.59 (18.12.2018)

Общие новости:
18.12.2018, 00:02

Форум:
18.12.2018, 14:33

Последний вопрос:
19.12.2018, 09:22

Последний ответ:
19.12.2018, 09:10

Последняя рассылка:
19.12.2018, 02:45

Писем в очереди:
0

Мы в соцсетях:

Наша кнопка:

RFpro.ru - здесь вам помогут!

Отзывы о нас:
22.06.2011, 15:16 »
Ханинёв Пётр Валерьевич
Оптимальный вариант решения задачи. Подробные комментарии. [вопрос № 183693, ответ № 267810]
14.01.2010, 22:53 »
Антонов А.В
Огромнейшее спасибо,точнее спасибище [вопрос № 176044, ответ № 258623]
21.10.2009, 17:12 »
inisider
Очень хороший ответ, вроде все как ясно. [вопрос № 173467, ответ № 255648]

РАЗДЕЛ • С / С++

Создание программ на языках C и C++.

[администратор рассылки: Андрей Кузнецов aka Dr_Andrew (Старший модератор)]

Лучшие эксперты в этом разделе

Лысков Игорь Витальевич
Статус: Старший модератор
Рейтинг: 168
solowey
Статус: Студент
Рейтинг: 166
Коцюрбенко Алексей aka Жерар
Статус: Мастер-Эксперт
Рейтинг: 104

Перейти к консультации №:
 

Консультация онлайн # 192299
Раздел: • С / С++
Автор вопроса: Вадим Исаев ака sir Henry (Старший модератор)
Отправлена: 02.01.2018, 17:59
Поступило ответов: 1

Здравствуйте! Прошу помощи в следующем вопросе:
Пытаюсь скомпилировать интерпретатор когда-то безумно популярного языка программирования Фокал, но столкнулся с ошибкой, которую не знаю как исправить.
В архиве, в файле proto.h, содержаться прототипы функций Фокала и вот на строчке:

int getline ARG((char *cp, FILE *fp))


получаю ошибку, что это объявление пересекается с объявлением из стандартного файла Си stdio.h.
Вопрос, как это исправить, не потеряв и функцию с таким же названием, которая должна быть в интерпретаторе с указанными выше аргументами?

Всех с прошедшим недавно Новым годом! smile

Архив: focal.zip (15.9 кб)

Редактирование
--------

• Отредактировал: Вадим Исаев ака sir Henry (Старший модератор)
• Дата редактирования: 02.01.2018, 18:00

Состояние: Консультация закрыта

Ответ # 276011 от Лысков Игорь Витальевич (Старший модератор)

Здравствуйте, Вадим Исаев ака sir Henry!
В результате обсуждения в мини-форуме пришли к выводу, что функция getline() была не всегда, а появилась в результате очередного изменения стандарта Си.
Поэтому программа, написанная для более раннего компилятора Си, не может использовать функцию из нового стандарта Си.
Выход предложен самим автором вопроса: использовать стандартную функцию getline() вместо рукописной.


Консультировал: Лысков Игорь Витальевич (Старший модератор)
Дата отправки: 08.01.2018, 11:17

Рейтинг ответа:

0

[подробно]

Сообщение
модераторам

Отправлять сообщения
модераторам могут
только участники портала.
ВОЙТИ НА ПОРТАЛ »
регистрация »

Мини-форум консультации № 192299

Лысков Игорь Витальевич
Старший модератор

ID: 7438

# 1

= общий = | 03.01.2018, 14:41 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
Вадим Исаев ака sir Henry:

Я бы все фокальные функции переименовал, например, добавив спереди f_ smile

=====
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен

Вадим Исаев ака sir Henry
Старший модератор

ID: 425

# 2

= общий = | 03.01.2018, 18:24 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
Лысков Игорь Витальевич:

Я тоже об этом думал... Вот только возникает один вопрос - у людей ведь раньше этот код работал, а сейчас почему не работает? smile
Одну "историческую" ошибку я там исправил - заменил "gets" на "fgets". Но там причина понятна. А вот с такими ни разу не сталкивался.

=====
Я только в одном глубоко убеждён - не надо иметь убеждений! :)

• Отредактировал: Вадим Исаев ака sir Henry (Старший модератор)
• Дата редактирования: 03.01.2018, 18:24

Лысков Игорь Витальевич
Старший модератор

ID: 7438

# 3

= общий = | 03.01.2018, 18:34 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
Вадим Исаев ака sir Henry:

© Цитата:
а сейчас почему не работает?
Может, в том Си, на котором раньше компилировался Фокал, не было функции getline() ? smile
Если дело только в этой функции, то переименовать ее и дело с концом smile

=====
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен

Вадим Исаев ака sir Henry
Старший модератор

ID: 425

# 4

= общий = | 03.01.2018, 18:47 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
Лысков Игорь Витальевич:

© Цитата: Лысков Игорь Витальевич
Может, в том Си, на котором раньше компилировался Фокал, не было функции getline() ?

Хорошая шутка, новогодняя... smile
А такое вообще может быть, чтобы в stdio.h добавляли новые функции окромя тех, что были на заре превращения homo sapiens в homo claves torcularis? smile
© Цитата: Лысков Игорь Витальевич
Если дело только в этой функции, то переименовать ее и дело с концом

Ну, если никто не знает, как решаются подобные коллизии в Си - так и сделаю...

=====
Я только в одном глубоко убеждён - не надо иметь убеждений! :)

Лысков Игорь Витальевич
Старший модератор

ID: 7438

# 5

= общий = | 03.01.2018, 19:19 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
Вадим Исаев ака sir Henry:

Зря смеетесь... smile
Скачал Си "Aztec C86" для ДОСа. Там и близко нет getline smile

Тут предлагают самим написать функцию getline() smile

И вообще, стандарт Си менялся довольно много раз... smile

=====
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен

• Отредактировал: Лысков Игорь Витальевич (Старший модератор)
• Дата редактирования: 03.01.2018, 19:27

Вадим Исаев ака sir Henry
Старший модератор

ID: 425

# 6

= общий = | 03.01.2018, 19:31 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
Лысков Игорь Витальевич:

© Цитата: Лысков Игорь Витальевич
И вообще, стандарт Си менялся довольно много раз...

А я думал, что только Фортран осмеливается ломать фундаментальные устои... smile

=====
Я только в одном глубоко убеждён - не надо иметь убеждений! :)

Вадим Исаев ака sir Henry
Старший модератор

ID: 425

# 7

= общий = | 03.01.2018, 19:35 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
Лысков Игорь Витальевич:

© Цитата: Лысков Игорь Витальевич
Скачал Си "Aztec C86" для ДОСа. Там и близко нет getline

Это разработка 1995 года. Или, по крайней мере, её последний раз изменяли в 1995 году. smile
Хорошо, Вы открыли мне глаза. smile Я подумаю, как самописную функцию поменять на стандартную. Тем более, что они должны делать одно и тоже. smile

=====
Я только в одном глубоко убеждён - не надо иметь убеждений! :)

Вадим Исаев ака sir Henry
Старший модератор

ID: 425

# 8

= общий = | 03.01.2018, 19:38 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
Лысков Игорь Витальевич:

Хотя, вот интересно, там же в файле proto.h есть объявление функции main(), но на неё компилятор почему то не ругается...

=====
Я только в одном глубоко убеждён - не надо иметь убеждений! :)

Лысков Игорь Витальевич
Старший модератор

ID: 7438

# 9

= общий = | 03.01.2018, 19:50 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
Вадим Исаев ака sir Henry:

Так main() ни в одной h-ке никогда не описывалась. Как бы, подразумевалась.

=====
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен

Вадим Исаев ака sir Henry
Старший модератор

ID: 425

# 10

= общий = | 03.01.2018, 20:07 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
Лысков Игорь Витальевич:

А Вы не подскажете, что означает такое описание функции:

int getline(cp, fp)
register char *cp;
register FILE *fp;
{
	register c;

Я раньше подобного никогда не встречал...

=====
Я только в одном глубоко убеждён - не надо иметь убеждений! :)

Лысков Игорь Витальевич
Старший модератор

ID: 7438

# 11

= общий = | 03.01.2018, 20:18 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
Вадим Исаев ака sir Henry:

Я тоже не встречал.
Полагаю, тип параметров задан вне имен самих параметров, а register - предписание хранить указанные переменные в регистрах, а не в памяти. И передавать параметры не в стеке, а в регистрах.

=====
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен

• Отредактировал: Лысков Игорь Витальевич (Старший модератор)
• Дата редактирования: 03.01.2018, 20:19

Вадим Исаев ака sir Henry
Старший модератор

ID: 425

# 12

= общий = | 03.01.2018, 20:38 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
Лысков Игорь Витальевич:

Ну вот, что-то получилось. smile

Теперь осталось разобраться с фокальим языком. smile

=====
Я только в одном глубоко убеждён - не надо иметь убеждений! :)

• Отредактировал: Вадим Исаев ака sir Henry (Старший модератор)
• Дата редактирования: 03.01.2018, 20:48

Лысков Игорь Витальевич
Старший модератор

ID: 7438

# 13

= общий = | 04.01.2018, 11:19 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
Вадим Исаев ака sir Henry:

smile
А чего вдруг потянуло на Фокал?

=====
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен

Коцюрбенко Алексей aka Жерар
Мастер-Эксперт

ID: 312929

# 14

= общий = | 04.01.2018, 11:31 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
Вадим Исаев ака sir Henry:

© Цитата:
Ну, если никто не знает, как решаются подобные коллизии в Си - так и сделаю...

А если пространство имён использовать?

Вадим Исаев ака sir Henry
Старший модератор

ID: 425

# 15

= общий = | 04.01.2018, 13:29 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
Лысков Игорь Витальевич:

© Цитата: Лысков Игорь Витальевич
А чего вдруг потянуло на Фокал?

Исключительно проказливости ради... smile

=====
Я только в одном глубоко убеждён - не надо иметь убеждений! :)

Вадим Исаев ака sir Henry
Старший модератор

ID: 425

# 16

= общий = | 04.01.2018, 13:30 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
Коцюрбенко Алексей aka Жерар:

© Цитата: Коцюрбенко Алексей aka Жерар
А если пространство имён использовать?

Я таким даже в с++ не пользовался. Поди ужасы какие-нибудь... smile

=====
Я только в одном глубоко убеждён - не надо иметь убеждений! :)

Андрей Кузнецов aka Dr_Andrew
Старший модератор

ID: 17042

# 17

= общий = | 06.01.2018, 18:05 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
Лысков Игорь Витальевич:

Оформите ответ?

=====
We have but faith: we cannot know;
For knowledge is of things we see;
And yet we trust it comes from thee,
A beam in darkness: let it grow.
-----
https://www.linkedin.com/in/andreynkuznetsov
https://www.researchgate.net/profile/Andrey_Kuznetsov11
http://www.researcherid.com/rid/K-8824-2014

 

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

Яндекс Rambler's Top100

главная страница | поддержка | задать вопрос

Время генерирования страницы: 0.16869 сек.

© 2001-2018, DBD::mysql::st execute failed: Incorrect key file for table '.\masterexpertpro_rfpro\todayvisitscounter.MYI'; try to repair it at C:\inetpub\vhosts\rfpro.ru\index.cgi line 142. Портал RFPRO.RU, Россия
Калашников О.А.  |  Гладенюк А.Г.
Версия системы: 7.59 от 18.12.2018