Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
mxs89
11 / 11 / 4
Регистрация: 13.04.2015
Сообщений: 155
Завершенные тесты: 1
#1

Функции, зависимые от реализации компилятора - C++

24.08.2016, 02:29. Просмотров 309. Ответов 18
Метки нет (Все метки)

какой вызов является зависимым от реализации компилятора?
realloc(..., 0)
memcpy() между объектами, перекрывающими друг друга
free(strdup())
calloc() нулевого размера
realloc(NULL, ...)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.08.2016, 02:29     Функции, зависимые от реализации компилятора
Посмотрите здесь:

C++ Смена Компилятора
C++ Функции, зависимые от параметра шаблона
C++ Создать класс для реализации комплексных чисел в алгебраической форме. Используя функции с объектом в качестве аргумента
"Перепрыгивание" компилятора к части кода после выхода из функции C++
Программа, собранная в MinGW требует зависимые библиотеки C++
C++ Программа реализации функции х % от у - остаток от деления (при этом х % 0 = 0)
C++ Ошибка компилятора
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DrOffset
6851 / 4062 / 927
Регистрация: 30.01.2014
Сообщений: 6,859
24.08.2016, 09:10     Функции, зависимые от реализации компилятора #2
mxs89, второй вариант (memcpy).
HighPredator
5454 / 1820 / 335
Регистрация: 10.12.2010
Сообщений: 5,383
Записей в блоге: 3
24.08.2016, 09:16     Функции, зависимые от реализации компилятора #3
Из перечисленного implementation-defined случаями являются:
1) realloc(..., 0)
2) calloc() нулевого размера
в соответствии с п.7.22.3 абзац 1 стандарта C11.
К ним я также склонен отнести и случай
free(strdup())
поскольку strdup() не является стандартизированной языком функцией, и как следствие она не обязана поддерживаться компиляторами.
HelicopterK52
650 / 193 / 28
Регистрация: 27.07.2016
Сообщений: 475
Завершенные тесты: 1
24.08.2016, 09:39     Функции, зависимые от реализации компилятора #4
Цитата Сообщение от DrOffset Посмотреть сообщение
mxs89, второй вариант (memcpy).
Достаточно запутано всё.
Зависит от реализации - это же implementation-defined behavior.
А memcpy с перекрывающимися диапазонами - это undefined behavior.
С другой стороны, эта самая неопределенность в поведении зависит не только от погоды на Марсе, но и от реализации. Я бы предпочел уточнить что нужно ТС.
Цитата Сообщение от HighPredator Посмотреть сообщение
1) realloc(..., 0)
2) calloc() нулевого размера
Если верить: http://www.cplusplus.com/reference/cstdlib/realloc/
то в зависимости от "эпохи", поведение разное. В последнем стандарте - Implementation-defined.
Так что нужно узнать из какого года препод.
DrOffset
6851 / 4062 / 927
Регистрация: 30.01.2014
Сообщений: 6,859
24.08.2016, 09:42     Функции, зависимые от реализации компилятора #5
HighPredator, опять мутная постановка вопроса.

Что вот понимается под "реализацией компилятора"? Если в том числе реализация библиотеки, то да, в соответствии с текущим стандартом предсказуем только последний вариант. Все остальные варианты так или иначе implementation-defined.
Вариант realloc(..., 0) был однозначным в C89, в этом случае realloc работает как free и возвращает NULL. В С11 - возвращаемое значение стало implementation defined.

Я же понимал вопрос буквально. Если речь именно про реализацию компилятора, а memcpy обычно реализуется именно как builtin-функция компилятора, и при этом по стандарту (п. 7.21.2.1/2 - iso/iec 9899:1999) она не позволяет копировать пересекающиеся участки памяти, то речь в вопросе именно о ней. С учетом того, что формулировка записана в единственном числе (т.е. делаем вывод, что вариант ответа только один).

Так что, автор, тут смотря как твой вопрос понимать и в соответствии с каким стандартом нужно отвечать. Так что не обессудь, коль что.
HelicopterK52
650 / 193 / 28
Регистрация: 27.07.2016
Сообщений: 475
Завершенные тесты: 1
24.08.2016, 09:44     Функции, зависимые от реализации компилятора #6
Цитата Сообщение от DrOffset Посмотреть сообщение
стандартом предсказуем только последний вариант.
Последний вариант:
Цитата Сообщение от mxs89 Посмотреть сообщение
realloc(NULL, ...)
т.е. это может быть realloc(NULL, 0)
DrOffset
6851 / 4062 / 927
Регистрация: 30.01.2014
Сообщений: 6,859
24.08.2016, 09:47     Функции, зависимые от реализации компилятора #7
Цитата Сообщение от HelicopterK52 Посмотреть сообщение
А memcpy с перекрывающимися диапазонами - это undefined behavior.
Это да. Но может вопрос задавался с отсылкой на эпический разнос от Торвальдса, по поводу изменения поведения memcpy в одном из релизов GCC.
SmittWesson
120 / 169 / 17
Регистрация: 04.06.2014
Сообщений: 1,279
24.08.2016, 09:49     Функции, зависимые от реализации компилятора #8
Ещё в 1984-м на конференции программёров, этот вопрос рассматривался. Не Парься, решили выделять память по факту существования областей. Если не хватает, зачистка при помощи уборщика. Блин, с тех пор ничего не изменилось!
DrOffset
6851 / 4062 / 927
Регистрация: 30.01.2014
Сообщений: 6,859
24.08.2016, 09:51     Функции, зависимые от реализации компилятора #9
Цитата Сообщение от HelicopterK52 Посмотреть сообщение
т.е. это может быть realloc(NULL, 0)
Да, может и так.
Вообще, я считаю, поделом.
Если этот вопрос в тесте, то он составлен двусмысленно и ответить на него абсолютно правильно нельзя.
Если это вопрос на "поговорить", то автор занимается самообманом пытаясь получить ответ на форуме. Зачем задающему чужие мысли, ему нужны мысли автора.
HelicopterK52
650 / 193 / 28
Регистрация: 27.07.2016
Сообщений: 475
Завершенные тесты: 1
24.08.2016, 09:55     Функции, зависимые от реализации компилятора #10
Цитата Сообщение от DrOffset Посмотреть сообщение
эпический разнос от Торвальдса
Торвальдс любит разносить всех. Правда разносит он то, что не угождает именно ему, имхо.
Да и сам Торвальдс не особо заботится о легаси, зато на других кричит, что поменяли поведение.
Это я не о memcpy сейчас, а вообще.

Добавлено через 3 минуты
DrOffset, вообще, можно сказать, что любой вызов зависит от реализации компилятора. Ведь именно компилятор занимается подготовкой вызова, раскладывает что куда нужно и т.д.
HighPredator
5454 / 1820 / 335
Регистрация: 10.12.2010
Сообщений: 5,383
Записей в блоге: 3
24.08.2016, 09:57     Функции, зависимые от реализации компилятора #11
Цитата Сообщение от HelicopterK52 Посмотреть сообщение
в зависимости от "эпохи", поведение разное
Специально сейчас открыл: C89, п.7.20.3 абзац 1: все так же: implementation-defined.
Цитата Сообщение от DrOffset Посмотреть сообщение
Что вот понимается под "реализацией компилятора"?
Я это трактовал как в стандарте: поскольку они под implementation имеют ввиду реализацию в компиляторе.
DrOffset
6851 / 4062 / 927
Регистрация: 30.01.2014
Сообщений: 6,859
24.08.2016, 10:06     Функции, зависимые от реализации компилятора #12
Цитата Сообщение от HighPredator Посмотреть сообщение
Специально сейчас открыл: C89, п.7.20.3 абзац 1: все так же: implementation-defined.
С89 - это же ANSI стандарт (у меня его нет)?
У меня есть ISO\IEC 9899:1990, и там даже п. 7.20.3 нет, все заканчивается на 7.13.
А в 7.10.3, про realloc ничего такого насчет implementation-defined не написано.
HelicopterK52
650 / 193 / 28
Регистрация: 27.07.2016
Сообщений: 475
Завершенные тесты: 1
24.08.2016, 10:17     Функции, зависимые от реализации компилятора #13
Цитата Сообщение от HighPredator Посмотреть сообщение
все так же: implementation-defined.
А непосредственно в описании realloc:
If size is zero and ptr is not a null pointer, the object it points to is freed.
HighPredator
5454 / 1820 / 335
Регистрация: 10.12.2010
Сообщений: 5,383
Записей в блоге: 3
24.08.2016, 10:21     Функции, зависимые от реализации компилятора #14
DrOffset, я ошибся, это С99. В С89, это раздел 4.10.3 Memory management functions -- http://port70.net/~nsz/c/c89/c89-draft.txt

Добавлено через 3 минуты
Цитата Сообщение от HelicopterK52 Посмотреть сообщение
А непосредственно в описании realloc
Это из какого пункта? У меня такой цитаты ни в одном стандарте нет.
HelicopterK52
650 / 193 / 28
Регистрация: 27.07.2016
Сообщений: 475
Завершенные тесты: 1
24.08.2016, 10:24     Функции, зависимые от реализации компилятора #15
Цитата Сообщение от HighPredator Посмотреть сообщение
Это из какого пункта? У меня такой цитаты ни в одном стандарте нет.
Да вот в том же документе, на который Вы ссылку дали
Чуть ниже в 4.10.3.4 The realloc function
HighPredator
5454 / 1820 / 335
Регистрация: 10.12.2010
Сообщений: 5,383
Записей в блоге: 3
24.08.2016, 10:27     Функции, зависимые от реализации компилятора #16
А, все, вижу. Да, походу это было выпилено из последующих. Плюсую.
DrOffset
6851 / 4062 / 927
Регистрация: 30.01.2014
Сообщений: 6,859
24.08.2016, 10:31     Функции, зависимые от реализации компилятора #17
Цитата Сообщение от HighPredator Посмотреть сообщение
ни в одном стандарте нет.
В упомянутом ISO\IEC 9899:1990 эта цитата также присутствует.
Собственно ISO\IEC 9899:1990 - это ISO`шное переиздание ANSI C89.
На сайте отсылка именно к нему же.
HighPredator
5454 / 1820 / 335
Регистрация: 10.12.2010
Сообщений: 5,383
Записей в блоге: 3
24.08.2016, 10:43     Функции, зависимые от реализации компилятора #18
DrOffset, вижу-вижу)))
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.08.2016, 22:02     Функции, зависимые от реализации компилятора
Еще ссылки по теме:

Необходимость реализации виртуальнй функции C++
Ошибка в реализации хеш-функции SHA1 C++
C++ Объясните цикл в реализации функции strcpy
Как установить конец строки при своей реализации функции strcpy()? C++
C++ Как правильно инициализировать данные-члены строкового типа в реализации функции-члена?

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
mxs89
11 / 11 / 4
Регистрация: 13.04.2015
Сообщений: 155
Завершенные тесты: 1
31.08.2016, 22:02  [ТС]     Функции, зависимые от реализации компилятора #19
calloc() нулевого размера
Yandex
Объявления
31.08.2016, 22:02     Функции, зависимые от реализации компилятора
Ответ Создать тему
Опции темы

Текущее время: 03:58. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru