GCC - The Complete Reference (537669), страница 128
Текст из файла (страница 128)
Действие этой опции можно отключить обратной опцией -«гпо-поп-севр1а се-х хеепб. 574 Часть)Ч, Приложения Опция -мпоп-сетар1аее-ст1епб применяется автоматически при установке оп- ции -)га11. -ччпоп-ч!Г1()а!-(!Гог с++ Выдает предупреждения в случаях, когда похоже, что не виртуальный дескриптор должен объявляться как виртуальный. Не виртуальный дескриптор не может быть выполнен при обращении к объекту из вышестоящих классов.
Автоматически применяется при установке опции -тга11, -'ччо!(!-йу!е-сай1 с++ Выдает предупреждения при использовании традиционного стиля приведения типов (стиля языка С) вместо более новых операторов стандарта С++ всас1с саве., сопев саве, тегпсетртес саве. Например: е1авв А ( е1авв В: раЬ11с А ( .
. . )/ А> а пен А()> В> Ь = а1 А" аз веасьс саве<А*>(Ь)т // конвертирование типов // стандартное приведение С++ -'ччои1-01-(!аде 3ача -'ччочег!оа(!ес!-ч!Галиа! с++ Вьщает предупреждение, когда объявление функции скрывает виртуальную функцию основного класса. В следующем примере функция хп() классадоказывается скрытой объявлением в классе В: е1авв А ( ч(теиа1 чоЫ Гп()/ ); с1авв В риЬ11с А ( чоЫ Гп(апе); )т -Ччр, орМаг)1Ы Рге Список опций, находящийся в поле орсзоп1зве, передается препроцессору.
Все элементы этого списка, разделенные запятыми, ставятся отдельными опциями командной строки препроцессора, См. также -)га и -и1. -'ччрас!(ес! с, с++, оь|с Выдает предупреждение о том, что указанный атрибут рас)тес( не имеет действия. Например, следующая структура (встпсс) будет занимать четыре байта независимо от атрибута рас)сей: Действует по умолчанию. Обратная опция -ипо-оис-ох-пасе подавляет выдачу предупреждений о том, что используемый файл класса устарел по отношению к соответствующему ему исходному файлу. Приложение Г.
Опции командной строки компилятора 6СС 575 вегасе ЕсигЬуее ( вЬсгс х) сЬаг а) сЬаг Ь) ) аесгЕЬисе ((расхей)) См. раздел "Атрибуты" в главе 4, опции -ерас)с-всгисс и -(враййест. -Фра(ЫеИ с, с++, оь|с Выдает предупреждение, когда компилятор вставляет свободное пространство (рагЫ!пй) между полями структуры (как дпя выравнивания в памяти полей, так и для выравнивания всей структуры).
В некоторых случаях возможно переупорядочивание полей для уменьшения размера структуры и обеспечения должного выравнивания без вставки пустого пространства. В следующем примере для обеспечения выравнивания по границе 2-х байтов нужна вставка одного пустого байта перед полем Ь типа вЬогеп вегасе раа ( сЬаг а) висге Ь) сиае с) -ФрагепФеяея с, с++, оь)с Вьщает предупреждения для синтаксически допустимых конструкций кода, которые могут быть сложными для понимания программистом (из-за порядка следования операторов илн пропущенных скобок в выражениях).
Выражение в этом примере кода может вызвать предупреждение: ЕЕ (а аа Ь (( с) В следующем примере возможно заблуждение относительно отношений между операторами ЕЕ и е1ве: ЕЕ(а) ЕЕ(Ь) а = рг е1ве а=с) Здесь разметка кода говорит о том, что е1ве относится к первому оператору ХЕ, хотя на деле это не так. В таких случаях тоже выдается предупреждение. Опция применяется автоматически при установке опции -иа11. -Фрпй-соп)гегяопа С++ Действует по умолчанию.
Указание обратной опции -ипо-ртЕ-сопуегв1опв подавляет выдачу предупреждений при преобразовании (приведении) типа указателя к адресу метода класса (гпегпЬег Гипс((оп). 576 Часть )Ч. Приложения -'чч ро!П1ег-аг!1Ь С, С++, ОЬ)С Включает выдачу предупреждений при принятии компилятором решений, зависящих от размера типа указателя (то!Й) или размера возвращаемого функцией результата. В ССС для обеспечения поддержки адресной арифметики размер зависимых величин по умолчанию в равен 1. -'ччрго1осо! оь!с Действует по умолчанию. Указание обратной опции -Ипо-ркокосо1 подавляет выдачу предупреждений при об отсутствии в протокольном классе метода, предусмотренного этим протоколом. С, С++, ОЬ)С Включает выдачу предупреждений при повторном объявлении символа в пределах одной области видимости переменных (зсоре).
Предупреждения выдаются независимо от идентичности таких объявлений. -%ге(!цпдап1-с!ес!5 -'ччгес!()ги3ап1-п)оЫ!егд !ача -'ччгеог(3ег С++ Выдает предупреждения в случае, если компилятор переупорядочивает метолы инициализации в соответствии с последовательностью их объявления. Например, следующий код представляет ситуацию, когда иницнализаторы будут переупорядочены: с1авв вео ( ьае 1; (пе 1) вес()г 5(5), 1(10) () )) Эта опция устанавливается автоматически при использовании опции -иа11. -))чге1()гп-1уре Включает выдачу предупреждений при объявлении функции возвращаемого результата и, соответственно, присвоении ему дпс. С, С++ без назначения типа типа по умолчанию — ччг!1е-с!ерепс!епс!е5 То же, что -мп.
Рге — ччг!1е-цдег-(!ерепс!епс!е5 То же, что -мир. Рге Выдает предупреждения об использовании лишних модификаторов. Например, если в объявлении метода одновременно использованы модификаторы спсекбасе и риЬ11с. Приложение Г. Опции командной строки компилятора 6СС 577 -!!уяе!ессог ОЬ!С Вьщает предупреждение об использовании переключателя (зе!есгог) для определения множества методов различных типов. -!!урнес!иепсе-ро! ПСь с Включает выдачу предупреждений в случае использования в пределах выражения более одного обращения к одной и той же переменной, когда одно из этих обращений изменяет ее значение. Определения языка С допускают любой порядок вычисления промежуточных результатов выражения в пределах соблюдения требований приоритета операторов. При этом изменение значения переменной в одной части составного выражения может приводить к получению непредсказуемого результата другой части выражения.
Части выражения выделяются в соответствии в положением в нем следующих операторов: аа 1~ з Далее вам предлагается несколько примеров составных выражений, которые изза неопределенного порядка вычисления их частей могут давать непредсказуемый результат: а а [а++3 а = а--; аГа++2 = Ьгв2я аГа] = ьГа + с1 С, С++, ОЬ!С, 1ача Включает выдачу предупреждений в случаях, когда объявление локачьной переменной перекрывает использование аргумента вызова текущей функции, глобальной переменной илн другой объявленной локальной переменой.
-ууй!9П-согпраге С, С++, ОЬ!С Выдает предупреждения о ситуациях, когда сравнение величины беззнакового типа со знаковой величиной может давать неправильный результат из-за приведения перед сравнением знакового типа к типу без знака. Опция автоматически устанавливается при использовании опции -тга11.
Ее действие можно отменить использованием обратной опции -тгпо-всдп-остраве. -ууй!Яп-ргогпо Выдает предупреждения при замещении объявления беззнакового илн перечисляемого типа данных знаковым типом того же размера. Такое замещение предусмотрено стандартом языка, но в некоторых случаях может приводить к потере данных. -ууйсг!с~-рго1о1урей С Опция назначает выдачу предупреждений об объявлении или определении функций без предварительного указания количества и типов аргументов. См.
также -ЗйясввХпд-рковосурав и -Вва1вв1пд-сес1акас1опв. 578 Часть ()(. Приложения с, с++, оь(с Предупреждает об использовании перечисляемого типа в качестве индекса переключателей саве оператора вн1сс)), когда отсутствует определение переключателя бейап1С и саве определены не для всех возможных значений перечисляемого типа.
Опция автоматически устанавливается при использовании опции -на11. -%5)))г) 1 с Ь -%5Уг)й с++ Выдает предупреждения о замещении (перегрузке) основных операций языка (орега(от з)п())еяз (В(гегеп( )тот с(гоп(). Следующий пример показывает синтез в ОСС оператора по типу Аа орепасох = (сопев Аа), где прекомпилятор с(гоп( использует оператор по умолчанию, определяемый пользователем, орехасок с1аав Л ( орепасох 1пе() ла оретасое = (ьпс) )ю ваап( ) ( л а1г Л а2; а1 = аз; -Ф5У51ет-Ьеадег5 с, с++, оь!с Включает выдачу предупреждений при компиляции кода системных заголовочных файлов (зуяегп ))еа()ег В!ез). Обычно все предупреждения, относящиеся к системным заголовочным файлам, подавляются.
Для выдачи предупреждений по неизвестным ргаяща-директивам в системных заголовочных файлах необходимо также указывать опцию -нцп)спснп-рхасзаав. По- -%5цГРг)5(п9 Ео(1га() Предупреждения, выдаваемые при этой опции, указывают на конструкции исходного кода, которые могут неоднозначно интерпретироваться компилятором, и потому давать неожиданный для программиста результат.