|
"C with Classes"
|
|
Для чего нужен C++?24.11.2019, 14:46. Показов 5682. Ответов 53
1
|
|
| 24.11.2019, 14:46 | |
|
Ответы с готовыми решениями:
53
Для чего нужен с++?
Для чего нужен break? |
|
Вездепух
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,306
|
||
| 25.11.2019, 03:47 | ||
|
Язык С здесь ни при чем. Это лишь глюки вашего компилятора.
0
|
||
|
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
|
||
| 25.11.2019, 04:17 | ||
|
0
|
||
|
"C with Classes"
|
|||
| 26.11.2019, 14:51 [ТС] | |||
![]() Добавлено через 1 минуту
0
|
|||
|
Комп_Оратор)
|
||
| 26.11.2019, 19:23 | ||
1
|
||
|
Вездепух
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,306
|
||||||||||||
| 28.11.2019, 03:45 | ||||||||||||
|
Как уже сто раз говорилось: выдача стандартного диагностического сообщения всегда является отказом компилятора компилировать ваш код. Является ли это сообщение "warning" это или "error" - никакого значения не имеет. Вы не смогли скомпилировать вашу "стеариновую свечку" ни в GCC, ни в Студии, о чем вам и тот, и другой компилятор ясно сказали. А ваши "результаты компиляции", которые вы якобы "получили" в результате - это просто мусор, который компилятор "забыл" убрать за собой. --- Кстати Pelles C в настройках по умолчанию
0
|
||||||||||||
|
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
|
||
| 28.11.2019, 05:08 | ||
|
Как уже говорилось, ранее скомпилированные файлы при повторной компиляции спокойно пропускаются. Поэтому, открываем QtCreator, тыкаем ctrl+B два раза, варнинг волшебным образом исчезает. Можно сколько угодно кричать "против стандарта!", но популярные компиляторы приведенную конструкцию проглатывают. Причем, в зависимости от обстоятельств - абсолютно незаметно для программиста. Тогда как в плюсах это именно что не компилируется ни под каким соусом.
0
|
||
|
Вездепух
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,306
|
||
| 28.11.2019, 07:26 | ||
|
Стандартными называются только те диагностические сообщения, которые требуются стандартом языка (потому что указывают но код, который является ошибочным). Это, например, ваше int twoTimesTwo = "стеариновая свечка";А варнинг "на одинокий int x; (unused variable);" не требуется стандартом языка. Этот код не является ошибочным кодом. Поэтому и любые варнинги на этот код являются лишь отсебятиной компилятора. "Стандартными" их никто никогда не назвал, поэтому и переименовывать ничего не нужно. (Это ваш первый ляп, обосновывающий мое "почти") Никаких "теорий" тут нет, есть обыкновенные и общеизвестные букварные азы языка С. С ними никто не спорит. (Это ваш второй ляп, обосновывающий мое "почти") Вопреки всем надеждам на обратное, жизнь однозначно показывает, что пропускать изучение этих азов не разрешается: страдающий подобными "пропусками" индивидуум никогда уже сможет ничего понять в программировании на С, какими бы титаническими ни были усилия наставников. Что в данном случае и ярко иллюстрируется, например, неспособностью врубиться в фундаментальную разницу между "одиноким int x; (unused variable);" и int twoTimesTwo = "стеариновая свечка";.В такой ситуации возможно только полное "выжигание напалмом" всего багажа бесполезных мусорознаний из мозга индивидуума до состояния "tabula rasa" и начало с самого начала, с нуля, с элементарных азов. А иначе толку не будет.
0
|
||
|
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
|
||
| 28.11.2019, 07:58 | ||
|
Если верить букварным истинам, то нельзя создавать flexible array member через CHAR Name[1], не говоря уже о том чтобы пихать потом такие конструкции в C++ код. В WinAPI структурах такое повсеместно (пример), C++ код с этими библиотеками вполне взаимодействует. Поэтому, это именно что теории. В практических компиляторах увы, имеют место вполне намеренные отступления от стандарта. А отнюдь не "там какой-то варнинг выскакивает. Иногда. Значит, это неправильный код".
0
|
||
|
Неэпический
|
||||
| 28.11.2019, 08:29 | ||||
![]() Это затычка, которая позволяет компилировать этот код C++-компилятором без поддержки поддержки C'шных flexible array member. Добавляем -pedantic-errors и получаем error вместо warning.Но, как уже написали выше, даже warning в данном случае является ошибкой, т.е. такой код не соответствует спецификации, на этом точка. Говорить в этом случае "что так можна в C" - нельзя.
0
|
||||
|
Вездепух
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,306
|
||||||
| 28.11.2019, 08:56 | ||||||
|
(Вот видите, какую кашу представляют из себя ваши домыслы о языке С. Ну нельзя же так подставляться...) Вот именно таки миражи вызываются отсутствием в этом воображении все тех же элементарных азов языка. Это первый "мираж", которым вы сами себя обманули. Второй очевидный "мираж": это непонимание фундаментальной разницы между грубыми ошибками уровня исходного кода и кодом, который формально корректен, но, возможно, не определен. Это совершенно разные вещи. int twoTimesTwo = "стеариновая свечка" - это грубая ошибка. Это сразу однозначно запрещено в языке С. Компилятор имеет право разрешить это, но любой компилятор, который вдруг решится разрешить что-то подобное, обязан сопроводить этот код диагностическим сообщением. Что GCC исправно и делает. Никаких отклонений от требований стандарта тут нет.Третий "мираж" существенно более глобален: наивное верование в то, что какие-то писульки в мануале GCC вообще имеют какие-то значение. Никому нет никакого дела до того, что там разрешает GCC. Да, GCC, как и любой другой компилятор, содержит массу расширений. Но ваши попытки прилепить эту самодеятельность к языку С вызывают лишь снисходительную улыбку. Никакого отношения к языку С все это не имеет. Речь идет о волне конкретном понимании того, что int twoTimesTwo = "стеариновая свечка" - неправильный код. Это не обсуждается. Если какому-то программисту понадобится воспользоваться гарантиями компилятора GCC на тему преобразования указательных типов в целые, он, разумеется, напишет int twoTimesTwo = (int) "стеариновая свечка" или int twoTimesTwo = (intptr_t) "стеариновая свечка" или еще как (идея, я думаю, ясна).А за попытки делать int twoTimesTwo = "стеариновая свечка" он тут же получит пинок под зад и больше до программирования допущен не будет. Как минимум пока не пройдет вышеупомянутый курс "выжигания напалмом до состояния tabula rasa" и обучения с нуля.
0
|
||||||
|
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
|
||||
| 28.11.2019, 09:01 | ||||
|
0
|
||||
|
Вездепух
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,306
|
||
| 28.11.2019, 09:06 | ||
|
Остается лишь повторить: разбираться в языке С можно только изначально не пропустив изучение азов. Если упустил, то потом будет поздно: сколько потом ни пытайся вдалбливать элементарные аксиомы, все равно получится лишь "на колу мочало, начинай сначала".
0
|
||
|
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
|
||
| 28.11.2019, 10:31 | ||
|
Как по мне, так в простоте и элегантности языка разобрался на все сто десять процентов.
0
|
||
|
Неэпический
|
|
| 28.11.2019, 12:24 | |
|
Renji, стандарт c++ не запрещает обращаться за пределы массива. Результат такого обращения - неопределенное поведение. Если реализация гарантирует коррекность, то никаких проблем.
Приведенные Вами примеры в сообщении выше какие-то стремные и непонятно в чем проблемы.
0
|
|
|
Комп_Оратор)
|
||
| 28.11.2019, 12:47 | ||
|
Тут мужики много полезного для новичков рассказывают... Это нужно. Пусть слабонервные сразу умрут или отвянут. Новички должны иметь железные Я. Мощные и несгибаемые Эго, в смысле. Ты молод и у тебя Эго не согнёшь, я думаю. А это главное. Остальное приложится. К той или иной стороне.
1
|
||
|
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
|
|||||||||||||
| 28.11.2019, 13:23 | |||||||||||||
void function() в C11 волшебным образом превращается в void function(...). А void function(){} еще более удивительным образом никуда не превращается. Принцип наименьшего удивления? Грабли на ровном месте? Не, не слышали. Главное, совместимость с кодом 1347 года, в котором ну никак нельзя просто поменять все () на (...). ("An identifier list declares only the identifiers of the parameters of the function. An empty list in a function declarator that is part of a definition of that function specifies that the function has no parameters. The empty list in a function declarator that is not part of a definition of that function specifies that no information about the number or types of the parameters is supplied."). Ну и проблема с безымянными параметрами на этом фоне это конечно мелочь.
0
|
|||||||||||||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||
| 28.11.2019, 15:42 | |||
|
стандарт описывает не какую то конкретную реализацию языка, а некоторый абстрактную модель, которая в теории должна подходить всем. очевидно, что в таких условиях стандарт должен учитывать возможные потребности, особенности, и ограничения всех возможных реализаций. и в то же время, не может закладываться ни на одну из них. по этой причине, абстрактная модель языка описывается преимущественно лишь в общих чертах. стандарт декларирует лишь общие, фундаментальные положения, которые хорошо ложатся на любые возможные особенности любых возможных реализаций. например, стандарт говорит: "если вы выйдете из летящего самолета без парашюта, то поведение не определено" и вроде бы тут всё просто. действительно, по статистике, когда из летящего самолета неправильно выходят, смертность практически 100%. конечно это не значит, что выйдя из самолета без парашюта ты обязательно разобъёшься. или что у тебя вообще будут какие то проблемы. может быть самолет летел низко, а под ним было море. или может быть это вообще учебный самолет-тренажор, и весь полет происходил только в виртуальной реальности. я хочу подчеркнуть мысль, которую всякого рода зануды-буквоеды почему-то не осиливают понять: поведение не определенно, потому что нет данных о конкретике конкретных ситуаций. поведение не определенно в общем случае. в каком-то очень конкретном случае поведение становится вполне себе определенным и ожидаемым. даже если в общем случае стандарт определяет ситуацию как UB. поэтому, не нужно бояться, что: "а в стандарте написанно 'дрова', значит 'дрова'" нужно понимать конкретику ситуации. осознавать границы применимости тех, или иных решений. например, ты знаешь что компилятор Visual Studio корректно обрабатывает некоторый кейс. ты у себя в коде с помощью каких нибудь макросов препроцессора пофиксил, и использовал специфичное для компилятора решение. почему бы и нет? именно так поступают разработчики boost. со стороны подумаешь: UB на UB, UB погоняет. но на практике работает на любой кофеварке, если только туда завезли с++. Добавлено через 1 минуту
0
|
|||
|
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
|
||||||||
| 28.11.2019, 15:43 | ||||||||
0
|
||||||||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||||||||
| 28.11.2019, 16:31 | ||||||||
|
UB: мы не знаем, что произойдёт, но скорее всего ничего хорошего. US: не известно как это реализовано в конкретном компиляторе, но все будет хорошо пример UB: выход за пределы диапазона массива пример US: порядок вычислений аргументов функций не определен
хотя лично я всё равно предпочитаю (void) arg;,потому что это удобнее. (более копипаста-ориентированное). когда разработка ещё только в процессе, некоторые аргументы получаются временно не используемыми. для них я методом копипаста делаю кучку (void) arg;,и по мере доработки реализации удаляю ненужные маркеры из кода. вариант с закомментированным аргументом использую только в том случае, если работа уже закончилась, но какой то из аргументов так и остался неиспользованным.
0
|
||||||||
| 28.11.2019, 16:31 | |
|
Для чего нужен Sizeof
Для чего нужен rdstate()
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров
В текущей версии модели успешно реализован ключевой механизм. . .
|
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям
Реализованные компоненты:
Механизм закисления почвы через протонную помпу
Конкуренция между типами микориз
pH как триггер сукцессии
C/ P соотношение. . .
|
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
|
Решил проблему с ошибкой пагинации сообщений с сервера на алгоритме обхода дерева "Эстафета хвоста".
Hrethgir 12.07.2026
Проблема была в том, что удалялась именно новая кнопка, а не старая. Ни один ИИ не обнаружил это, а сам я смог только когда с работой стало попроще и когда заставил работать будущее автономное. . .
|
|
сукцессия 25. Хронология ошибок
anaschu 12.07.2026
# От 50-тонного гриба до устойчивого леса: хроника ошибок при построении модели вековой сукцессии микоризы
## О чём эта статья
В процессе построения ОДУ-модели (система дифференциальных. . .
|
сукцессия 24. Промежуточное общее описание модели
anaschu 12.07.2026
Хендофф: модель АМ→ЭКМ сукцессии микоризы (ризосфера, 50 лет)
Содержание проекта
Симуляция вековой (50 лет) экологической сукцессии в почве леса
Основные участники: АМ-гриб, ЭКМ-гриб,. . .
|
сукцессия 23. Более физиологичная физиология, более экологичная экология, более диффурные диффуры.
anaschu 12.07.2026
Что реально нашли и починили за эти 5 часов
Правило Линдемана (КПД конверсии сахара в тело, kEff) — раньше 100% полученного углерода шло прямо в биомассу гриба; теперь только kEff=0. 5 (после. . .
|
сукцессия 22. От артефактов к физиологии: калибровка агентной модели грибной сукцессии для воспроизведения сезонной динамики и pH-плато
anaschu 11.07.2026
Аннотация
В данной работе представлена калибровка агентной модели динамики грибных сообществ (fungal-succession), направленная на устранение нефизичных артефактов (коллапс биомассы, мгновенное. . .
|