Преимущества super()
в одиночном наследовании минимальны - в основном вам не нужно жестко закодировать имя базового класса во все методы, которые используют его родительские методы.
Однако использовать множественное наследование практически невозможно super()
. Это включает в себя общие идиомы, такие как mixins, интерфейсы, абстрактные классы и т. Д. Это распространяется на код, который позже расширяет ваши. Если кто-то позже захотел написать класс, который расширил Child
и mixin, их код не будет работать должным образом.
Из форума разработчиков Apple (требуется учетная запись):
"Компилятор и компоновщик способны использовать функции и выполнять оптимизации, которые не работают на более старой ОС версии.
-mmacosx-version-min
сообщает инструментам, с какими версиями ОС вы должны работать, поэтому инструменты могут отключать оптимизации, которые не будут выполняться в этих версиях ОС. Если вам нужно запускать более старые версии ОС, вы должны использовать этот флаг.«Недостатком
-mmacosx-version-min
является то, что производительность приложения может быть хуже на более новых версиях ОС, чем могла бы быть, если бы не требовалось быть обратно совместимым. В большинстве случаев различия незначительны.
Я сознательно пишу этот ответ на старый вопрос с этим в виду, потому что другие ответы мне не помогли.
Я получил Illegal Instruction: 4
, пока запустив двоичный файл в той же системе, на которой я его скомпилировал, поэтому -mmacosx-version-min
не помогло.
Я использовал gcc в Code Blocks 16 в Mac OS X 10.11.
Тем не менее, отключить все флаги компилятора Code Blocks для оптимизации. Поэтому посмотрите на все флаги, установленные в блоке Code Block (щелкните правой кнопкой мыши на Project -> «Build Properties») и отключите все флаги, которые вам не нужны, особенно -s
и флаги -O
для оптимизации , Это сделало это для меня.
Я обнаружил, что моя проблема была неправильной if (leaf = NULL) {...}
, где она должна была быть if (leaf == NULL){...}
Проверьте эти предупреждения компилятора!
Недавно я получил эту ошибку. Я скомпилировал двоичный код с -O3. Google сказал мне, что это означает «незаконный код операции», который казался мне подозрительным. Затем я отключил все оптимизации и повторил. Теперь ошибка превратилась в segfault. Следовательно, установив -g и запустив valgrind, я отследил источник и зафиксировал его. Повторное включение всех оптимизаций не показало никаких дальнейших проявлений незаконной инструкции 4.
По-видимому, оптимизация неправильного кода может дать странные результаты.
Сообщение «незаконная инструкция» просто говорит вам, что ваши двоичные файлы содержат инструкции, которые версия ОС, которую вы пытаетесь запустить, не понимает. Я не могу дать вам точный смысл 4
, но я ожидаю, что это будет внутренним для Apple.
В противном случае взгляните на эти ... они немного старые, но, вероятно, скажу вам, что вы необходимо знать
Как работает 64-битный код на OS-X 10.5? Что означает версия macosx-version-min?
-mmacosx-version-min=10.10
. – Demitri 10 May 2017 в 14:52