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

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

Восстановить пароль Регистрация
 
mxs89
10 / 10 / 4
Регистрация: 13.04.2015
Сообщений: 140
Завершенные тесты: 1
24.08.2016, 02:29     Функции, зависимые от реализации компилятора #1
какой вызов является зависимым от реализации компилятора?
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++ Программа реализации функции х % от у - остаток от деления (при этом х % 0 = 0)
Необходимость реализации виртуальнй функции C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DrOffset
6461 / 3835 / 886
Регистрация: 30.01.2014
Сообщений: 6,630
24.08.2016, 09:10     Функции, зависимые от реализации компилятора #2
mxs89, второй вариант (memcpy).
HighPredator
 Аватар для HighPredator
5352 / 1735 / 320
Регистрация: 10.12.2010
Сообщений: 5,120
Записей в блоге: 3
24.08.2016, 09:16     Функции, зависимые от реализации компилятора #3
Из перечисленного implementation-defined случаями являются:
1) realloc(..., 0)
2) calloc() нулевого размера
в соответствии с п.7.22.3 абзац 1 стандарта C11.
К ним я также склонен отнести и случай
free(strdup())
поскольку strdup() не является стандартизированной языком функцией, и как следствие она не обязана поддерживаться компиляторами.
HelicopterK52
634 / 177 / 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
6461 / 3835 / 886
Регистрация: 30.01.2014
Сообщений: 6,630
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
634 / 177 / 28
Регистрация: 27.07.2016
Сообщений: 475
Завершенные тесты: 1
24.08.2016, 09:44     Функции, зависимые от реализации компилятора #6
Цитата Сообщение от DrOffset Посмотреть сообщение
стандартом предсказуем только последний вариант.
Последний вариант:
Цитата Сообщение от mxs89 Посмотреть сообщение
realloc(NULL, ...)
т.е. это может быть realloc(NULL, 0)
DrOffset
6461 / 3835 / 886
Регистрация: 30.01.2014
Сообщений: 6,630
24.08.2016, 09:47     Функции, зависимые от реализации компилятора #7
Цитата Сообщение от HelicopterK52 Посмотреть сообщение
А memcpy с перекрывающимися диапазонами - это undefined behavior.
Это да. Но может вопрос задавался с отсылкой на эпический разнос от Торвальдса, по поводу изменения поведения memcpy в одном из релизов GCC.
SmittWesson
 Аватар для SmittWesson
120 / 169 / 17
Регистрация: 04.06.2014
Сообщений: 1,273
24.08.2016, 09:49     Функции, зависимые от реализации компилятора #8
Ещё в 1984-м на конференции программёров, этот вопрос рассматривался. Не Парься, решили выделять память по факту существования областей. Если не хватает, зачистка при помощи уборщика. Блин, с тех пор ничего не изменилось!
DrOffset
6461 / 3835 / 886
Регистрация: 30.01.2014
Сообщений: 6,630
24.08.2016, 09:51     Функции, зависимые от реализации компилятора #9
Цитата Сообщение от HelicopterK52 Посмотреть сообщение
т.е. это может быть realloc(NULL, 0)
Да, может и так.
Вообще, я считаю, поделом.
Если этот вопрос в тесте, то он составлен двусмысленно и ответить на него абсолютно правильно нельзя.
Если это вопрос на "поговорить", то автор занимается самообманом пытаясь получить ответ на форуме. Зачем задающему чужие мысли, ему нужны мысли автора.
HelicopterK52
634 / 177 / 28
Регистрация: 27.07.2016
Сообщений: 475
Завершенные тесты: 1
24.08.2016, 09:55     Функции, зависимые от реализации компилятора #10
Цитата Сообщение от DrOffset Посмотреть сообщение
эпический разнос от Торвальдса
Торвальдс любит разносить всех. Правда разносит он то, что не угождает именно ему, имхо.
Да и сам Торвальдс не особо заботится о легаси, зато на других кричит, что поменяли поведение.
Это я не о memcpy сейчас, а вообще.

Добавлено через 3 минуты
DrOffset, вообще, можно сказать, что любой вызов зависит от реализации компилятора. Ведь именно компилятор занимается подготовкой вызова, раскладывает что куда нужно и т.д.
HighPredator
 Аватар для HighPredator
5352 / 1735 / 320
Регистрация: 10.12.2010
Сообщений: 5,120
Записей в блоге: 3
24.08.2016, 09:57     Функции, зависимые от реализации компилятора #11
Цитата Сообщение от HelicopterK52 Посмотреть сообщение
в зависимости от "эпохи", поведение разное
Специально сейчас открыл: C89, п.7.20.3 абзац 1: все так же: implementation-defined.
Цитата Сообщение от DrOffset Посмотреть сообщение
Что вот понимается под "реализацией компилятора"?
Я это трактовал как в стандарте: поскольку они под implementation имеют ввиду реализацию в компиляторе.
DrOffset
6461 / 3835 / 886
Регистрация: 30.01.2014
Сообщений: 6,630
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
634 / 177 / 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
 Аватар для HighPredator
5352 / 1735 / 320
Регистрация: 10.12.2010
Сообщений: 5,120
Записей в блоге: 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
634 / 177 / 28
Регистрация: 27.07.2016
Сообщений: 475
Завершенные тесты: 1
24.08.2016, 10:24     Функции, зависимые от реализации компилятора #15
Цитата Сообщение от HighPredator Посмотреть сообщение
Это из какого пункта? У меня такой цитаты ни в одном стандарте нет.
Да вот в том же документе, на который Вы ссылку дали
Чуть ниже в 4.10.3.4 The realloc function
HighPredator
 Аватар для HighPredator
5352 / 1735 / 320
Регистрация: 10.12.2010
Сообщений: 5,120
Записей в блоге: 3
24.08.2016, 10:27     Функции, зависимые от реализации компилятора #16
А, все, вижу. Да, походу это было выпилено из последующих. Плюсую.
DrOffset
6461 / 3835 / 886
Регистрация: 30.01.2014
Сообщений: 6,630
24.08.2016, 10:31     Функции, зависимые от реализации компилятора #17
Цитата Сообщение от HighPredator Посмотреть сообщение
ни в одном стандарте нет.
В упомянутом ISO\IEC 9899:1990 эта цитата также присутствует.
Собственно ISO\IEC 9899:1990 - это ISO`шное переиздание ANSI C89.
На сайте отсылка именно к нему же.
HighPredator
 Аватар для HighPredator
5352 / 1735 / 320
Регистрация: 10.12.2010
Сообщений: 5,120
Записей в блоге: 3
24.08.2016, 10:43     Функции, зависимые от реализации компилятора #18
DrOffset, вижу-вижу)))
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.08.2016, 22:02     Функции, зависимые от реализации компилятора
Еще ссылки по теме:

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

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

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

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