GCC - The Complete Reference (537669), страница 119
Текст из файла (страница 119)
Приложение Г. Опции командной строки компилятора ОСС 535 -Май С++ Выводит статистику обработки программы верхним уровнем компилятора. Эта информация относится к внутренним действиям компилятора, Опция не влияет на вырабатываемый компилятором код. -й1оге-сЬес!( )ача Действует ло умолчанию. Указание обратной опции -йпо-веоге-с)тес)к удаляет код, проверяющий во время выполнения программы соответствие типов объектов при их сохранении в массив. -Й1геп9Ф-ге(Ьсе Применяет такую оптимизацию циклов, которая сокра(цает их код и исключает избыточные переменные внутри цикла.
Также происходит замена медленно выполняемых операций, таких как умножение и деление, на более простые и быстрые операции, такие как сложение и вычитание. Эта опция всегда автоматически применяется лри использовании опций -йцпго11-1оорв и -1ппго11-а11-1оорв. Ее автоматически устанавливают также опции оптимизации -о2, -ОЗ и -ов. При необходимости данную опцию можно отключить обратной опцией — бпо-вггепдг)т-ге()цсе. Вот простой пример. В цикле используется временная переменная для хранения вычисляемого значения индекса массива и ее значение вычисляется из переменной цикла умножением на 2: лог (1пс 1=от 1<10( 1++) ( 1поех = 3. а Зт егапкп1в (ха1агг(1пдех)) ) Здесь внутренняя переменная цикла 1п()ех можно исключить. Кроме того, лля умножения на 2 можно применить простую операцию логического сдвига.
В результате получается такой код; еог (1пс (=От 1<10( 1++) ( кгаякя1в (ха1агг(1 « 1))к ) Сдвиг на одну двоичную позицию счетчика цикла умножает его значение на 2 и результат выражения непосредственно используется в качестве индекса массива без его хранения во временной переменной. -(ь1ПС1-а!)аь)П9 При атой опции применяются наиболее строгие правила использования синонимов при адресации данных и функций (а))аз!пя). Синонимами (а))аз) считаются различные имена программных символов, прямо или косвенно адресующиеся к одному расположению памяти.
Применение строгих правил синонимов, к примеру, для языка С означает, что символ типа 1пс не может быть синонимом символа типа ()оиЬ1е или указателя, но может быть синонимом символа типа ппв1дпей с)таг. 536 Часть П(. Приложения Даже при строгих правилах совмещения имен могут оставаться проблемы при обращениях к члену объединения (шпон тещЬег) через адрес объединения вместо использования для этого указателя на требуемый член объединения. Вот пример кода, который может вызывать проблемы; 1пс *ърхс ипъоп ( ъпе 1та1иет гтоиЫе гтта1иег ) е1дв( а1дв.1зга1ие = 45г 1рст йп1дв.1та1ие( Епаее(в ("1рсп)г а1дв.огга1ие = 88.бг Гхеппп1в (*1рсх]г В этом примере строгое совмещении имен может не определить возможное изменение значения, адресуемого указателем 1рск, в промежутке между двумя вызовами функции. При прямой адресации членов объединения таких проблем не возникает.
45угпЬО!-са5е-прес гог1гап Поле врес указывает регистр буквенных знаков (строчные/заглавные), используемый в определяемых пользователем символах программы. Возможны следующие значения врес: ° 1п1ссар — Слово начинается с заглавной буквы, остальные буквы — строчные. ° иррег — Все слово должно быть написано заглавными буквами. ° 1оттег — Все слово должно быть написано строчными буквами. ° апу — Допускается любой порядок использования строчных и заглавных букв. Это значение применяется по умолчанию. См. также -х(пас(т-саве-, -хвоиксе-саве-, -х1пех1п-саве- и -хсаве-. -15уп1ах ЕОГ1гап Компилятор только проверяет синтаксис исходного кода.
Больше никаких действий при этой опции не предпринимается. -11егпр!а1е-Йер1(гпитЬег С++ Число пппкгех. устанавливает наибольшую допустимую глубину вложенности экземпляров шаблона для определения ситуаций рекурсивной или циклической подстановки шаблонов кода. При достаточном соответствии программы стандарту нет необходимости указывать допустимую глубину более 17. По умолчанию она равна 500.
Приложение Г. Опции командной строки компилятора ОСС 537 -тте1г-сочегаяе При этой опции компилятор вырабатывает файлы, содержащие информацию для утилиты дсотг. Эти файлы несут то же имя, что и исходный файл, но имеют суффиксы, указывающие на их содержание.
Файлы с суффиксом . ЬЬ содержат информацию о соответствии основных блоков объктного кода номерам строк исходного файла. Эта информация используется дсож для соотношения результатов подсчета проходов выполнения с номерами строк исходного кода. Файлы с суффиксом . ььд содержат список связей графа потока выполнения программы (йоч агар)т). Эта информация используется дсозг для перестроения графа потока выполнения и расчета количества проходов выполнения блоков программы по данным из файлов с суффиксом .ба, вырабатываемых по опции -крхог11е-ахов.
См, также опции -а, -хсеве-со~кехаде и -крхок11е-агсв. -ЙЬгеад-)игпрв Возникают ситуации когда после вычислении условия перехода и его выполнения управление может передаваться в такое расположение программы, где из действуюших на момент первичного перехода значений вычисляется новое условие, которое вызывает новый переход с вполне определенным при таких обстоятельствах назначением. В таких случаях возможна оптимизация последовательных переходов, которая перенаправляет цель первичного перехода в место окончательного предназначения. Эта опция устанавливается автоматически при всех уровнях оптимизации. В отличие от других подобных опций она не может быть замещена опцией -кпо-еЬхеай-эшврв.
-Югпе-герог~ По этой опции после завершения компиляции программы печатается отчет о времени, затраченном на компиляцию. Выводится время использования отведенных пользователю ресурсов, время использования системы и отсчеты времени (тхай с)осй) лля каждого прохода. Выводятся суммарные итоги времени использования.
-йгарр) п9-гпатгз Действует по умолчанию. При установке обратной опции -гпо-кхарр1пд-шаеЬ считается, что ошибки операций с плавающей точкой не могут вызывать исключения, обрабатываемые прерываниями, и порождать сигналы. Обратная опция -гпо-ехаррзпд-калев может привести к генерированию такого кода, который нарушает условия стандартных правил для операций с плавающей точкой. -гтгарч Генерирует код, который перехватывает и обрабатывает ситуации переполнения результата операций сложения чисел с учетом знака, а также операций деления и умножения.
Эта опция может использоваться во время тестирования программы и создавать файлы сохе для каждого случая переполнения результата, которые обычно проходят незамеченными и могут вызывать проблемы. 538 часть ПЬ Приложения По умолчанию действует обратная опция — хцо-скарзг. -Йуре!ехх-Ьог Рог1гап Указывает использование бестипового префикса, определяющего предельное значение (или основание счета, гайх) недесятичных констант вместо применения по умолчанию типа хнтвовк(кхнр=1). Имеются в виду константы наподобие в "Авсп', -сия!у-агях Гог1гап Действует по умолчанию. Обратная опция -Хпо-цд1у-агдв запрещает передачу в аргументах вызова функций бестиповых констант формата "Но!егй)>".
По умолчанию будут допустимыми оба следующих примера вызова; САЬЬ ЯВВП(4НАВСН> САЬЬ ВАН< хгэ О> -1оя!у-а1х(9п При этой опции программа использует общие ячейки для хранения присваиваемых меток (аза)япеб )аЬе)з) и числовых данных (пшпепс дага). Например два оператора следующего примера используют одно и то же расположение ячейки: 1=3 Аввхон хо то х Эту опцию необходимо применять, если программа обращается к присваиваемому значению как элементу данных, потому что по умолчанию для хранения различных типов информации всегда отводятся отдельные ячейки.
-Ь9!у-аыигпес! Еог1гап Массив с указанным размером в один элемент считается объявленным с размером "*". Например, оператор пхмвнтхон х (1) при этой опции воспринимается как рхмвнтхом х('). -1о9!у-соп>п>а Завершающая список аргументов запятая воспринимается как передача подпрограмме дополнительного нулевого аргумента. То есть, при этой опции оператор сАьь вьоа() будет передавать вызываемой подпрограмме один нулевой аргумент, а САьь нхм(, ) — два нулевых аргумента.
Без этой опции завершающая запятая в списке аргументов будет игнорироваться и подпрограммам не будут передаваться нуль-аргументы даже и в случае присутствия в списке других аргументов. -Ь9!у-согпр!ех Гог1гап Допускает использование с встроенными функциями (!пгппз1сз) квдь(ехрх) и АХМАО(ежрк) любых типов комплексных выражений.
По умолчанию допускаются только такие выражения с комплексными числами, которые дают результат типа сомрьвх(кхнп=х). Приложение Г. Опции командной строки компилятора 6СС 539 При совместном ислользовании этой олции с опцией -кк 90 такие встроенные функции не конвертируют возвращаемые ими действительную и мнимую части комллексного аргумента. -Ь9!у-!пав ГОГФгап Действует ло умолчанию. При указании обратной опции -тпо-ид1у-1пз.е не допускается использование данных формата Но!елей в операторах ллтл и вллльглтлл. При этом также не разрешается использование буквенных констант для инициализации числовых типов данных и наоборот, использование числовых констант для инициализации буквенных типов данных.
-1и 9!у-1О91п1 ГОГ1гап Применяет автоматическое конвертирование типов хлтлолл и ьоохсдь лрактически во всех случаях, где это необходимо. Этого достаточно, чтобы лерекрестно использовать два этих типа почти в любых выражениях. 4ые-ЬоеЬп-Яс !ача Опция назначает использование метода "Воейгл" разметки битовых полей в выгружаемой в своп информации в ходе выполнения программы. (Воейш яагЬаяе со11есбол Ы(гоар тагЫля сог(е.) -Йесоп(1-опдегвсоге Действует ло умолчанию. См, опцию -хипбегвсох1пд.