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

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

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

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

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

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

Функции, зависимые от параметра шаблона - C++
Всем привет. Допустим имеется шаблонный класс template<class T> class Test { T _t; public: Test(T& t) : _t(t) { } int...

Необходимость реализации виртуальнй функции - C++
Добрый день. Возник следующий вопрос. class A { virtual void foo() = 0; //чисто виртуальная функция }

Ошибка в реализации хеш-функции SHA1 - C++
Здравствуйте, Решил написать простую реализацию, но результат вычислений оставляет желать лучшего Подскажите, пожалуйста, какой нюанс я...

Объясните цикл в реализации функции strcpy - C++
На форуме нашел реализацию функции strcpy: char * strcpy(char * dst, const char * src){ char * d = dst; while ( *d++ = *src++ ) ...

Программа реализации функции х % от у - остаток от деления (при этом х % 0 = 0) - C++
помогите написать стандартную программу для мпд, которая реализует функцию х % от у - остаток от деления (при этом х % 0 = 0). помогите...

Есть ли более правильный и элегантный способ реализации функции? - C++
Доброе время форумчане! bool db::CreateSQLTable() { QSqlQuery a; QString str = "CREATE TABLE "SortFiles" ("id" INTEGER...

"Перепрыгивание" компилятора к части кода после выхода из функции - C++
Уважаемые форумчане! Решил обратиться к вам, благо уже не знаю, что делать. Накодил я тут QuickSort текста по алфавиту для лабы. Он...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DrOffset
7058 / 4199 / 949
Регистрация: 30.01.2014
Сообщений: 6,965
24.08.2016, 09:10     Функции, зависимые от реализации компилятора #2
mxs89, второй вариант (memcpy).
HighPredator
5474 / 1840 / 342
Регистрация: 10.12.2010
Сообщений: 5,431
Записей в блоге: 3
24.08.2016, 09:16     Функции, зависимые от реализации компилятора #3
Из перечисленного implementation-defined случаями являются:
1) realloc(..., 0)
2) calloc() нулевого размера
в соответствии с п.7.22.3 абзац 1 стандарта C11.
К ним я также склонен отнести и случай
free(strdup())
поскольку strdup() не является стандартизированной языком функцией, и как следствие она не обязана поддерживаться компиляторами.
HelicopterK52
659 / 202 / 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
7058 / 4199 / 949
Регистрация: 30.01.2014
Сообщений: 6,965
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
659 / 202 / 28
Регистрация: 27.07.2016
Сообщений: 475
Завершенные тесты: 1
24.08.2016, 09:44     Функции, зависимые от реализации компилятора #6
Цитата Сообщение от DrOffset Посмотреть сообщение
стандартом предсказуем только последний вариант.
Последний вариант:
Цитата Сообщение от mxs89 Посмотреть сообщение
realloc(NULL, ...)
т.е. это может быть realloc(NULL, 0)
DrOffset
7058 / 4199 / 949
Регистрация: 30.01.2014
Сообщений: 6,965
24.08.2016, 09:47     Функции, зависимые от реализации компилятора #7
Цитата Сообщение от HelicopterK52 Посмотреть сообщение
А memcpy с перекрывающимися диапазонами - это undefined behavior.
Это да. Но может вопрос задавался с отсылкой на эпический разнос от Торвальдса, по поводу изменения поведения memcpy в одном из релизов GCC.
SmittWesson
120 / 169 / 17
Регистрация: 04.06.2014
Сообщений: 1,287
24.08.2016, 09:49     Функции, зависимые от реализации компилятора #8
Ещё в 1984-м на конференции программёров, этот вопрос рассматривался. Не Парься, решили выделять память по факту существования областей. Если не хватает, зачистка при помощи уборщика. Блин, с тех пор ничего не изменилось!
DrOffset
7058 / 4199 / 949
Регистрация: 30.01.2014
Сообщений: 6,965
24.08.2016, 09:51     Функции, зависимые от реализации компилятора #9
Цитата Сообщение от HelicopterK52 Посмотреть сообщение
т.е. это может быть realloc(NULL, 0)
Да, может и так.
Вообще, я считаю, поделом.
Если этот вопрос в тесте, то он составлен двусмысленно и ответить на него абсолютно правильно нельзя.
Если это вопрос на "поговорить", то автор занимается самообманом пытаясь получить ответ на форуме. Зачем задающему чужие мысли, ему нужны мысли автора.
HelicopterK52
659 / 202 / 28
Регистрация: 27.07.2016
Сообщений: 475
Завершенные тесты: 1
24.08.2016, 09:55     Функции, зависимые от реализации компилятора #10
Цитата Сообщение от DrOffset Посмотреть сообщение
эпический разнос от Торвальдса
Торвальдс любит разносить всех. Правда разносит он то, что не угождает именно ему, имхо.
Да и сам Торвальдс не особо заботится о легаси, зато на других кричит, что поменяли поведение.
Это я не о memcpy сейчас, а вообще.

Добавлено через 3 минуты
DrOffset, вообще, можно сказать, что любой вызов зависит от реализации компилятора. Ведь именно компилятор занимается подготовкой вызова, раскладывает что куда нужно и т.д.
HighPredator
5474 / 1840 / 342
Регистрация: 10.12.2010
Сообщений: 5,431
Записей в блоге: 3
24.08.2016, 09:57     Функции, зависимые от реализации компилятора #11
Цитата Сообщение от HelicopterK52 Посмотреть сообщение
в зависимости от "эпохи", поведение разное
Специально сейчас открыл: C89, п.7.20.3 абзац 1: все так же: implementation-defined.
Цитата Сообщение от DrOffset Посмотреть сообщение
Что вот понимается под "реализацией компилятора"?
Я это трактовал как в стандарте: поскольку они под implementation имеют ввиду реализацию в компиляторе.
DrOffset
7058 / 4199 / 949
Регистрация: 30.01.2014
Сообщений: 6,965
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
659 / 202 / 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
5474 / 1840 / 342
Регистрация: 10.12.2010
Сообщений: 5,431
Записей в блоге: 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
Это из какого пункта? У меня такой цитаты ни в одном стандарте нет.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.08.2016, 10:24     Функции, зависимые от реализации компилятора
Еще ссылки по теме:

Как установить конец строки при своей реализации функции strcpy()? - C++
Доброго времени суток, попробовал сам реализовать функцию strcpy(). Программа работоспособная, но интересует один момент. Это рабочий...

Как правильно инициализировать данные-члены строкового типа в реализации функции-члена? - C++
Всем здравствуйте. У меня тут возникла очень глупая ошибка и я не могу понять в чем причина и как ее исправить. Значит, имеется структура. ...

Создать класс для реализации комплексных чисел в алгебраической форме. Используя функции с объектом в качестве аргумента - C++
Создать класс для реализации комплексных чисел в алгебраической форме. Используя функции с объектом в качестве аргумента, реализовать...

Программа, собранная в MinGW требует зависимые библиотеки - C++
Пишу такой код #include <iostream> int main() { std::cout << "Hello World!"; return 0; } компилирую так g++ -O2 -c...

настройка компилятора - C++
ребят как настроить компилятор чтобы работать с графикой ? вроде бы нужно чтото прописать в derectories ... помогите плиз (компилятор turbo...


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

Или воспользуйтесь поиском по форуму:
HelicopterK52
659 / 202 / 28
Регистрация: 27.07.2016
Сообщений: 475
Завершенные тесты: 1
24.08.2016, 10:24     Функции, зависимые от реализации компилятора #15
Цитата Сообщение от HighPredator Посмотреть сообщение
Это из какого пункта? У меня такой цитаты ни в одном стандарте нет.
Да вот в том же документе, на который Вы ссылку дали
Чуть ниже в 4.10.3.4 The realloc function
Yandex
Объявления
24.08.2016, 10:24     Функции, зависимые от реализации компилятора
Ответ Создать тему
Опции темы

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