Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Микропроцессорная техника Сторожок / MPLAB_C30_Руководство пользователя.pdf
Скачиваний:
161
Добавлен:
20.02.2016
Размер:
1.26 Mб
Скачать

16-битовый компилятор Си. Руководство

3.4.Соглашение для имен файлов

Драйвер компилятора чувствителен к регистру и понимает следующие расширения имен файлов:.

ТАБЛИЦА 3-1. ИМЕНА ФАЙЛОВ

Расширение

 

Описание

 

 

file.c

Исходный файл Cи, должен обрабатываться препроцессором.

file.h

Файл заголовка (не компилируется и не компонуется)

 

 

file.i

Исходный файл Си, не должен обрабатываться препроцессором

 

 

 

file.o

Объектный файл

 

 

 

file.p

Файл на ассемблере до оптимизации процедурных абстракций

 

 

.

file.s

Файл на ассемблере

A

 

 

file.S

Файл на ассемблере, должен обрабатываться препроцессором

 

 

Прочее

Файлы, которые будут переданы компоновщику

 

 

 

3.5.

Опции

Wilson

 

 

 

Компилятор имеет много опций для управления компиляцией и все они

 

чувствительны к регистру.

 

 

Опции, специфические для устройств dsPIC

 

Опции для управления типом результатов

 

Опции для управления диалектом Cи

 

 

by

 

Опции управления предупреждениями и сообщениями об ошибках

 

Опции для отладки

 

 

Translated

 

Опции для управления оптимизацией

Опции для управления препроцессором

Опции для ассемблера

Опции для компоновщика

Опции для поиска в каталогах

Опции для соглашений по генерации кода

3.5.1. Опции, специфические для устройств dsPIC

Более подробно о моделях памяти, см п. 4.6 «Модели памяти».

ТАБЛИЦА 3-2. ОПЦИИ, СПЕЦИФИЧЕСКИЕ ДЛЯ dsPIC®

Опция

Описание

 

 

-mconst-in-code

Константы размещаются в пространство auto_psv. Компилятор

 

организует доступ к этим константам через окно PSV. (Умолчание.)

 

 

-mconst-in-data

Константы размещаются в пространстве памяти данных

 

 

-merrata=

Эта опция разрешает специфическую обработку ошибок,

id[,id]*

определенных идентификатором id. Разрешенные значения id

 

изменяются время от времени и возможно не потребуются для

 

конкретного варианта. Получить список поддерживаемых текущим

 

вариантом идентификаторов ошибок и их краткое описание можно

 

задав list вместо id. Задав all вместо id можно разрешить

 

обработку всех поддерживаемых текущим вариантом ошибок.

 

 

DS51284H(ru) стр. 3-2

© 2008 Microchip Technology Inc.

Глава 3. Использование компилятора в командной строке

ТАБЛИЦА 3-2. (ПРОД-Е) ОПЦИИ, СПЕЦИФИЧЕСКИЕ ДЛЯ dsPIC®

 

Опция

 

 

 

Описание

 

 

 

 

 

 

 

-mlarge-code

 

Компиляция с использованием большой модели кода. О локальности

 

 

 

вызываемых функций никаких допущений не делается.

 

 

 

 

Когда опция выбрана, одиночные функции, которые больше 32К не

 

 

 

поддерживаются и могут вызвать ошибку ассемблирования, т.к. все

 

 

 

инструкции ветвления внутри функции имеют короткую форму

 

 

 

 

 

-mlarge-data

 

Компиляция с использованием большой модели данных. Не делается

 

 

 

никаких допущений о расположении статических и глобальных

 

 

 

переменных.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-mcpu=target

 

 

 

.

 

 

 

 

 

Опция задает идентификатор типа процессора (и сообщает его

 

 

 

ассемблеру и компоновщику, если они используются). Эта опция

 

 

 

влияет на установку некоторых предопределенных констант.

 

 

 

Подробнее см. п. 3.7. Полный списокA

поддерживаемых контроллеров

 

 

 

 

Wilson

 

 

 

 

 

 

см в файле Readme.htm, который приходит вместе с поставкой.

 

-mpa(1)

 

Разрешает оптимизацию процедурных абстракций. Уровень

 

 

 

вложенности неограничен.

 

 

 

 

-mpa=n(1)

 

Разрешает оптимизацию процедурных абстракций до уровня n. Если

 

 

 

n — ноль, оптимизация запрещена. Если n=1, первый уровень

 

 

 

абстракции разрешен, т.е. последовательность команд в исходном

 

 

 

коде может быть абстрагирована в подпрограмму. Если n=2, второй

 

 

 

уровень абстракции разрешен, т.е. инструкции, которые были

 

 

 

помещены в подпрограмму на первом уровне, могут быть

 

 

 

 

абстрагированы в подпрограмму на один уровень глубже.

 

 

 

 

 

by

 

 

 

 

 

 

 

Аналогичные построения можно продолжать для больших значений n.

 

-mno-pa(1)

 

Оптимизация процедурных абстракций запрещена (Умолчание.)

 

 

 

 

 

 

 

 

 

Translated

 

 

 

 

 

 

 

Примечание 1. Процедурные абстракции ведут себя как inline функции наоборот. Подход

 

 

состоит в том, чтобы выделить множество повторяющихся

 

 

последовательностей кода в пределах единицы трансляции и разместить их

 

 

в общей области кода. Хотя эта опция не улучшает скорости исполнения

 

 

сгенерированного кода, она может существенно снизить его объем.

 

 

Программы, откомпилированные с -mpa могут быть тяжелее для отладки,

 

 

поэтому не рекомендуется использовать эту опцию при отладке с

 

 

использованием объектного формата COFF.

 

 

 

 

Процедурный абстрактор вызывается на отдельной фазе компиляции,

 

 

после создания файла ассемблерного кода. Эта фаза не оптимизирует код

 

 

за пределами единицы трансляции. Когда процедурная оптимизация

 

 

разрешена, ассемблерный код должен содержать только разрешенные

 

 

машинные

команды.

Запрещенные

команды

и

командные

 

 

последовательности, либо директивы ассемблера (директивы секций,

 

 

макросы, включение файлов и т.п.) не должны использоваться, иначе фаза

 

 

процедурной абстракции окончится неудачей и создание выходного файла

 

 

будет запрещено.

 

 

 

 

 

 

 

 

 

 

-mno-isr-warn

 

По умолчанию компилятор выдает предупреждение, если

 

 

 

 

__interrupt__ не присоединен к опознанному имени вектора

 

 

 

прерывания. Данная опция запрещает такое предупреждение.

 

 

 

 

 

-momf=omf

 

Задает формат объектного модуля (OMF, Object Module Format),

 

 

 

производимый компилятором.

 

 

 

 

 

 

Спецификатор omf может быть одним из:

 

 

 

 

 

coff

создается объектный файл формата COFF (Умолчание.)

 

 

 

elf

создается объектный файл формата ELF.

 

 

 

 

 

Для отладки объектных файлов ELF используется формат отладки

 

 

 

DWARF 2.0.

 

 

 

 

 

 

 

 

 

-msmall-code

 

Компиляция с использованием малой модели кода. Предполагается,

 

 

 

что вызываемые функции близко (в пределах 32К слов от точки

 

 

 

вызова) (Умолчание.)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

© 2008 Microchip Technology Inc.

DS51284H(ru) стр. 3-3

16-битовый компилятор Си. Руководство

ТАБЛИЦА 3-2. (ПРОД-Е) ОПЦИИ, СПЕЦИФИЧЕСКИЕ ДЛЯ dsPIC®

Опция

Описание

 

 

-msmall-data

Компиляция с использованием малой модели данных. Все

 

статические и внешние переменные предполагаются находящимися в

 

младших 8Кб адресного пространства данных (Умолчание.)

 

 

-msmall-scalar

То же, что и -msmall-data, но в младших 8Кб адресного

 

пространства данных должны находиться только скалярные

 

статические и внешние переменные. (Умолчание.)

 

 

-mtext-name

Спецификация -mtext=name приводит к тому, что код программы

 

.

 

будет помещен в секцию с именем name, а не в секцию .text, как по

 

умолчанию. До и после знака = не должно быть пробелов.

-msmart-io

A

Эта опция попытки статического анализа строки формата

[=0|1|2]

передаваемой в printf, scanf, а также ‘f’ и ‘v’ вариации этих

 

функций. Использование аргументов, кроме имеющих формат с

 

Wilson

 

плавающей точкой, будет преобразовано так, чтобы применялись

 

только целочисленные варианты библиотечных функций.

 

-msmart-io=0 отключает эту опцию, тогда как -msmart-io=2

 

заставляет компилятор быть оптимистом и преобразовывать вызовы

 

функций с переменным или неизвестным аргументами формата.

 

-msmart-io=1 (умолчание) преобразуются только проверенные

 

литеральные величины.

 

 

3.5.2. Опции для управления типом результатов

Следующие опции управляют типом результатов, производимых компилятором.

 

 

by

 

ТАБЛИЦА 3-3. ОПЦИИ УПРАВЛЕНИЯ ТИПОМ РЕЗУЛЬТАТОВ КОМПИЛЯЦИИ

 

Опция

 

Описание

 

 

 

 

-c

Компиляция и ассемблирование исходных файлов без компоновки.

 

Translated

c-header

 

 

 

Расширение имени файла по умолчанию .o.

 

-E

Остановка после стадии препроцессорной обработки, т.е. перед

 

 

запуском собственно компилятора. Выходной файл по умолчанию

 

 

выводится на stduot.

 

 

-o file

Направление вывода в файл file.

 

-S

Остановка после непосредственной компиляции, (т.е. перед вызовом

 

 

ассемблера). Расширение имени выходного файла по умолчанию .s.

 

-v

Печать команд, выполняемых на каждой стадии компиляции.

 

-x

Вы можете явно указать входной язык с использованием опции -x:

 

 

-x language

 

 

 

Определяйте явно язык для последующих за опцией входных файлов

 

 

(а не заставляйте компилятор выбирать его на основе суффиксов

 

 

имен файлов). Эта опция действует для всей последовательности

 

 

входных файлов, пока не встретится другая опция -x

 

 

Параметр language может принимать значения:

 

 

c

 

 

 

cpp-output

 

 

 

assembler

 

 

 

assembler-with-cpp

 

 

 

none — отключает спецификацию языка, поэтому следующие за ней

 

 

файлы будут обрабатываться в соответствии с суффиксами своих

 

 

имен. Это умолчание, но использовать такой параметр надо, если

 

 

перед этим язык был задан явно опцией -x. Например:

 

 

pic30-gcc -x assembler foo.asm bar.asm -x none main.c

 

 

mabonga.c

 

 

 

Без использования -x none компилятор принял бы все входные

 

 

файлы за ассемблерные.

 

 

 

 

 

--help

Печать описания опций командной строки

 

 

 

 

DS51284H(ru) стр. 3-4

© 2008 Microchip Technology Inc.

Глава 3. Использование компилятора в командной строке

3.5.3. Опции для управления диалектом Cи

Следующие опции определяют диалект Си, используемый компилятором.

ТАБЛИЦА 3-4. ОПЦИИ ДИАЛЕКТА СИ

Опция

 

Описание

 

 

 

-ansi

 

Поддержка всего (и не более) стандарта ANSI Си

-aux-info filename

 

Вывод в заданный именем filename файл прототипов

 

 

деклараций для всех функций, объявленных и/или

 

 

определенных в единице трансляции, включая файлы

 

 

заголовка. Эта опция молча игнорируется в любом языке,

 

 

кроме Cи. Помимо деклараций, файл содержит в форме

 

 

A

 

 

комментариев: источник.каждой декларации (исходный файл

 

 

и строка), была ли декларация неявной, прототипом или не

 

 

прототипом (обозначено соответственно буквами I, N для

 

 

Wilson

 

 

новой формы или O для старой, в первом символе после

 

 

номера строки и двоеточия), и была ли это декларация или

 

 

определение (C или F, соответственно, в следующем

 

 

символе). В случае определений функций, в комментариях,

 

 

после декларации, добавляется также список аргументов в

 

 

стиле K&R (Кернигана и Ритчи), сопровождаемых их

 

 

декларациями.

 

 

 

-ffreestanding

 

Объявление, что компиляция происходит в автономной

 

 

среде. Это подразумевает -fno-builtin. Автономная

 

 

среда — это среда, которой нет стандартной библиотеки и

 

 

запуск в программы необязательно может быть из main.

 

by

 

 

Наиболее очевидный пример — ядро ОС. Опция

 

 

эквивалентна -fno-hosted.

-fno-asm

 

Не распознавать asm, inline и typeof как ключевые

Translated

 

слова, поэтому код может использовать их в качестве

 

идентификаторов. Вместо них можно использовать ключевые

 

 

 

 

слова __asm__, __inline__ и __typeof__.

 

 

Использование опции -ansi предполагает -fno-asm

 

 

 

-fno-builtin

 

Не распознавать встроенных функций, которые не

-fno-builtin-function

 

начинаются с префикса __builtin__.

 

 

 

-fsigned-ch

 

Тип char будет знаковым, как signed char (Умолчание.)

 

 

 

-fsigned-bitfields

 

Эти опции позволяют устанавливать, будут ли битовые поля

-funsigned-bitfields

 

знаковыми или нет, когда это явно не указано в их

-fno-signed-bitfields

 

декларации. По умолчанию, такие битовые поля будут

-fno-un igned-bitfields знаковыми, если не использована опция -traditional, при

 

 

которой битовые поля всегда беззнаковые.

 

 

 

-funsigned-char

 

Тип char будет беззнаковым, как unsigned char

 

 

 

-fwrit ble-string

 

Предписывает сохранять строки в сегменте данных

 

 

доступном для записи и не делать их уникальными

 

 

 

3.5.4. Опции управления предупреждениями и сообщениями об ошибках

Предупреждения — это диагностические сообщения, которые информируют о конструкциях, не ошибочных по сути, но рискованных или потенциально ошибочных.

Вы можете запросить множество специфических предупреждений с помощью опций, начинающихся на -W, например, -Wimplicit, чтобы запрашивать предупреждения о неявных декларациях. Каждая из этих опций специфических предупреждений также имеет отрицательную форму, начинающуюся на -Wno-, чтобы выключать предупреждения, например, -Wno-implicit. Это руководство включает описание только одной из двух форм, той, что не принята по умолчанию.

© 2008 Microchip Technology Inc.

DS51284H(ru) стр. 3-5

16-битовый компилятор Си. Руководство

Следующие опции управляют количеством и типами предупреждений, выдаваемых компилятором.

ТАБЛИЦА 3-5. ОПЦИИ ПРЕДУПРЕЖДЕНИЙ, ПОДРАЗУМЕВАЕМЫЕ -Wall

Опция

 

 

Описание

 

 

 

-fsyntax-only

 

Синтаксическая проверка кода, и ничего более

-pedantic

 

Вывод всех предупреждений, требуемых полным ANSI Си,

 

 

отклонение все программ, использующих запрещенные

 

 

расширения.

 

 

 

 

 

-pedantic-errors

 

 

.

 

То же, что и -pedantic, но с предпочтением сообщений об

 

 

ошибках перед предупреждениями.

-w

 

A

 

 

Запрет всех предупреждений

-Wall

 

Используются вместе все опции, представленные в данной

 

 

таблице. Это разрешает все предупреждения о конструкциях,

 

 

Wilson

 

 

 

которые часть пользователей рассматривает как

 

 

сомнительные, и которых легко избежать (или

 

 

модифицировать, чтобы предотвратить предупреждение),

 

 

даже в соединении с макросами.

-Wchar-subscripts

 

Предупредить, когда индекс массива имеет тип char

-Wcomment

 

Предупредить, всякий раз, когда последовательность начала

-Wcomments

 

комментария /* обнаруживается в комментарии типа /* или

 

 

всякий раз, когда \n появляется в комментарии типа //

 

 

 

-Wdiv-by-zero

 

Предупредить о делении на 0 на этапе компиляции. Для

 

 

заперта такого предупреждения используйте

 

by

 

 

 

-Wno-div-by-zero

 

-Werror-implicit-

 

Предупредить всякий раз при использовании функции до ее

function-declaration

 

декларации

 

-Wformat

 

Проверять функции printf, scanf и т.п., чтобы

Translated

 

удостовериться, что типы использованных аргументов

 

соответствуют заданной строке формата.

 

 

 

 

 

-Wimplicit-int

 

Предупредить, когда в декларации не задан тип.

 

 

 

-Wmain

 

Предупредить, если тип main вызывает подозрения. main

 

 

должна быть функцией с внешней связью, возвращающей

 

 

тип int, и принимающей ноль, два либо три аргумента

 

 

соответствующих типов.

 

 

 

 

-Wmissing-braces

 

Предупредить, если инициализация объединения или союза

 

 

не полностью заключена в скобки. Ниже приведены примеры

 

 

не правильной (a) и правильной (b) инициализации:

 

 

int a[2][2] = { 0, 1, 2, 3 };

 

 

int b[2][2] = { { 0, 1 }, { 2, 3 } };

 

 

 

-Wmultichar

 

Предупредить, если использована многосимвольная char

-Wno-multichar

 

константа. Обычно такие константы являются печатными

 

 

ошибками. Поскольку их значение зависит от реализации, они

 

 

не должны использоваться в переносимом коде. Следующий

 

 

пример иллюстрирует использование многосимвольных char

 

 

констант:

 

 

 

char xx(void)

 

 

{

 

 

 

return(‘xx’);

 

 

}

 

 

 

 

-Wparentheses

 

Предупреждает, если круглые скобки опущены в

 

 

определенном контексте, таком как присвоение в контексте,

 

 

где предполагается истинное значение, или, когда операторы

 

 

вложены так, что человеку часто трудно определит порядок

 

 

исполнения.

 

 

 

 

 

DS51284H(ru) стр. 3-6

© 2008 Microchip Technology Inc.

Глава 3. Использование компилятора в командной строке

ТАБЛИЦА 3-5. (ПРОД-Е) ОПЦИИ ПРЕДУПРЕЖДЕНИЙ, ПОДРАЗУМЕВАЕМЫЕ -Wall

Опция

-Wreturn-type

-Wsequence-point

Translated

-Wswitch

 

Описание

Предупреждать всегда, когда возвращаемый результат

функции определен по умолчанию как int. Также

предупреждать, когда обнаруживается оператор return без

возвращаемого значения в функции, возвращаемый тип

которой определен как не void.

Предупреждать о коде, который может иметь

неопределенную семантику из-за нарушения правил точки

упорядочивания (sequence point rules) стандарта Си.

 

.

Стандарт Си определяет порядок вычисления выражения в

A

 

Си программе в терминах точек упорядочивания, которые

представляют поэтапную очередность между выполнением

частей программы: то, что выполнено перед точкой

Wilson

 

упорядочивания, и то, что выполнено после нее. Это имеет

место после вычисления полного выражения (которое не

является частью большего выражения), после вычисления

первого операнда для операторов &&, ||, ? : или ,

(запятой), перед вызовом функции (но после вычисления ее

аргументов и выражений, свидетельствующих о вызове

функции) и в ряде других ситуаций. За исключением случаев,

определенных правилами точек упорядочивания,

очередность вычисления подвыражений в выражении не

определена. Все эти правила описывают только частичный

порядок, а не общий, т.е., например, если две функции

вызваны в пределах одного выражения без точки

by

 

упорядочивания между ними, очередность, в которой

функции вызываются, не определена. Несмотря на это,

комитет стандартов установил, что вызовы функций не

должны перекрываться.

 

Момент, когда между точками упорядочивания вступает в

силу изменение значений объектов, не определен.

Программы, чье поведение зависит от этого, ведут себя

непредсказуемо; стандарт Cи определяет, что «Между

предыдущей и следующей точкой последовательности,

объект должен иметь хранимую величину

модифицированной, самое большое, один раз при

вычислении выражения. Больше того, предшествующее

значение должно быть прочитано, только чтобы определить

величину, которую нужно сохранить.» Если программа

нарушает эти правила, результаты в любой конкретной

реализации полностью непредсказуемы.

Примеры кода с неопределенным поведением:

a = a++; a[n] = b[n++]; a[i++] = i;.

Некоторые более сложные случаи не диагностируются этой

опцией, что может дать случайный ложный положительный

результат, но в общем она признается довольно эффективной

в обнаружении проблем такого рода в программах.

Предупреждать всегда, когда оператор switch имеет индекс

типа перечисления и опущены варианты для одного или более

кодов перечисления. (Наличие варианта «по умолчанию»

отменяет предупреждение). Метка case за пределами

диапазона перечисления также провоцирует

предупреждение при использовании этой опции.

© 2008 Microchip Technology Inc.

DS51284H(ru) стр. 3-7

16-битовый компилятор Си. Руководство

ТАБЛИЦА 3-5. (ПРОД-Е) ОПЦИИ ПРЕДУПРЕЖДЕНИЙ, ПОДРАЗУМЕВАЕМЫЕ -Wall

Опция

 

 

Описание

 

 

 

-Wsystem-headers

 

Вывод предупреждения для конструкций, найденных в

 

 

файлах системных заголовков. Предупреждения от

 

 

системных заголовков обычно подавляются на основании

 

 

предположения о том, что они, как правило, не отражают

 

 

реальной проблемы, а только затрудняют чтение выводимой

 

 

компилятором информации. Использование этой опции

 

 

командной строки предписывает компилятору выдавать

 

 

предупреждения от системных заголовков, как будто они

 

 

 

.

 

 

обнаружены в коде пользователя. Тем не менее, обратите

 

 

A

 

 

 

внимание, что использование -Wall вместе с этой опцией не

 

 

будет предупреждать о неизвестных прагмах в системных

 

 

заголовках. Для таких целей следует использовать опцию

 

 

Wilson

 

 

 

-Wunknown-pragmas.

 

-Wtrigraphs

 

Предупредить при обнаружении любого триграфа

 

 

(подразумевается, что они разрешены.)

-Wuninitialized

 

Предупредить, если автоматическая переменная

 

 

используется без предварительной инициализации.

 

 

Эти предупреждения разрешены, только если включена

 

 

оптимизация, поскольку они требуют информации о потоке

 

 

данных, которая вычисляется только при оптимизации.

 

 

Эти предупреждения имеют место только для переменных,

 

 

которые являются кандидатами на размещение в регистрах.

 

 

Таким образом, они не появляются для переменных, которые

 

 

были объявлены как volatile, или адрес которых имеется,

 

 

или размер которых отличается от 1, 2, 4 или 8 байтов. Также

 

 

они не появляются для структур, союзов и массивов, даже

 

 

если они размещены в регистрах.

Translated

byЗаметьте, что может не быть предупреждения о переменной,

 

используемой только для вычисления значения, которое само

 

 

 

 

никогда не применяется, поскольку такое вычисление может

 

 

быть удалено при анализе потока данных до того, как

 

 

предупреждение будет выдано.

 

 

 

-Wunknown-pragmas

 

Предупредить, когда встретилась директива #pragma,

 

 

которая непонятна компилятору. Когда используется данная

 

 

опция командной строки, предупреждения выдаются, даже

 

 

если неизвестная прагма встретится в файлах системных

 

 

заголовков. Этого не происходит, если предупреждения

 

 

разрешены только опцией -Wall.

 

 

 

-Wunused

 

Предупредить всякий раз, если переменная не используется

 

 

нигде, кроме декларации, если функция объявлена как

 

 

static, но никогда не определена, если метка объявлена,

 

 

но не использована, и, если оператор вычислил результат,

 

 

который явно не используется.

 

 

При необходимости получать предупреждения о

 

 

неиспользуемом параметре функции, опции -W и -Wunused

 

 

должны быть заданы вместе.

 

 

Приведение выражений к типу void подавляет данные

 

 

предупреждения для выражений. Аналогично, атрибут

 

 

unused подавляет данные предупреждения по отношению к

 

 

неиспользуемым переменным, параметрам и меткам.

 

 

 

-Wunused-function

 

Предупредить всякий раз, когда статическая функция

 

 

объявлена, но не определена, или не inline статическая

 

 

функция не используется.

 

 

 

-Wunused-label

 

Предупредить всякий раз, когда метка объявлена, но не

 

 

используется. Для подавления этого предупреждения

 

 

используйте атрибут unused (см. п. 2.3.1. «Определение

 

 

атрибутов переменных».)

 

 

 

 

DS51284H(ru) стр. 3-8

© 2008 Microchip Technology Inc.

Глава 3. Использование компилятора в командной строке

ТАБЛИЦА 3-5. (ПРОД-Е) ОПЦИИ ПРЕДУПРЕЖДЕНИЙ, ПОДРАЗУМЕВАЕМЫЕ -Wall

Опция

Описание

 

 

-Wunused-parameter

Предупредить всякий раз, когда обнаруживается параметр

 

функции, не использованный нигде, кроме своей декларации.

 

Для подавления предупреждения используйте атрибут

 

unused (см. п. 2.3.1. «Определение атрибутов переменных».)

 

 

-Wunused-variable

Предупредить всякий раз, когда локальная или не

 

константная статическая переменная не используется нигде,

 

кроме своей декларации. Для подавления предупреждения

 

используйте атрибут unused (см. п. 2.3.1. «Определение

 

.

 

 

атрибутов переменных» )

 

-Wunused-value

Предупредить всякий раз, когда оператор вычисляет

 

результат, который явно нигде не используется. Для

 

подавления предупрежденияA

приводите выражение к типу

 

Wilson

 

 

void.

 

Следующие опции -W не предполагаются опцией -Wall. Некоторые из них предупреждают о конструкциях, которые пользователи обычно не рассматривают как сомнительные, но которые иногда требуется проверить. Другие предупреждают о конструкциях, которые необходимы или которых трудно избежать в определенных ситуациях, и не существует простых способов модификации кода, чтобы подавить предупреждения о них.

by Translated

© 2008 Microchip Technology Inc.

DS51284H(ru) стр. 3-9

16-битовый компилятор Си. Руководство

ТАБЛИЦА 3-6. ОПЦИИ ПРЕДУПРЕЖДЕНИЙ, НЕ ПОДРАЗУМЕВАЕМЫЕ -Wall

Опция

-W

Translated

-Waggregate-return

-Wbad-function-cast

-Wcast-align

Описание

Выдать дополнительные предупреждения для событий:

Когда nonvolatile автоматическая переменная могла быть

изменена вызовом longjmp. Эти предупреждения

возможные только при оптимизирующей компиляции.

Компилятор видит только вызовы setjmp. Он не может

знать, где будет вызван longjmp; фактически, обработчик

 

.

сигнала мог бы вызвать его в любой точке кода. В

A

 

результате, предупреждение может выдаваться даже

тогда, когда фактически проблемы нет, поскольку longjmp

не может в действительности быть вызван в месте, которое

Wilson

 

должно породить проблему.

Когда из функции можно выйти и через return value; и

через return;. Завершение тела функции без оператора

возврата трактуется как return;.

Когда оператор выражения или левая часть выражения с

операндом «запятая» не имеют побочного эффекта. Для

подавления сообщения приведите неиспользуемое

выражение к типу void. Например, такое выражение, как

x[i,j] вызовет предупреждение, а x[(void)i,j] — нет.

Когда беззнаковая величина сравнивается с нулем с

помощью операций < или <=

Когда появляется сравнение, похожее на x<=у<=z, которое

эквивалентно (x<= y ? 1 : 0)<=z, которое

интерпретируется иначе, нежели его обычная

by математическая запись.

• Когда спецификация класса памяти, такая как static, не стоит на первом месте в декларации. Согласно стандарту Си, такое употребление устарело.

• Когда заданы опции -Wall или -Wunused и имеют место неиспользуемые аргументы.

• Когда при сравнении знаковой и беззнаковой величин может получиться неправильный результат, если знаковая величина преобразуется в беззнаковую. (Предупреждение не выдается, если задана опция -Wno-sign-compare.)

• Когда объединение имеет не полностью заключенный в фигурные скобки инициализатор. Например, следующий код вызовет предупреждение, т.к. пропущены скобки вокруг инициализатора x.h:

struct s { int f, g; };

struct t { struct s h; int i; }; struct t x = { 1, 2, 3 };

• Когда в объединении инициализируются не все члены. Например, следующий код вызовет предупреждение, т.к. x.h неявно инициализируются нулем:

struct s { int f, g, h; }; struct s x = { 3, 4 };

Предупредить, если определена или вызвана функция, которая возвращает структуру или союз.

Предупредить всякий раз, когда вызов функции приводится к несоответствующему типу. Например, предупредить, если функция int foof() приводится к указателю.

Предупредить всякий раз, когда приведение указателя повышает выравнивание. Например, предупредить, если char * приводится к int *.

DS51284H(ru) стр. 3-10

© 2008 Microchip Technology Inc.

Глава 3. Использование компилятора в командной строке

ТАБЛИЦА 3-6. (ПРОД-Е) ОПЦИИ ПРЕДУПРЕЖДЕНИЙ, НЕ ПОДРАЗУМЕВАЕМЫЕ -Wall

Опция

 

 

Описание

 

 

 

-Wcast-qual

 

Предупредить всякий раз, когда приведение указателя

 

 

вызывает потерю квалификатора в типе указуемого объекта.

 

 

Например, предупредить, если const char * приводится к

 

 

просто char *.

 

 

 

 

-Wconversion

 

Предупредить, если прототип вызывает преобразование типа

 

 

отличное от того, которое было бы с тем же аргументом при

 

 

отсутствии прототипа. Это включает преобразования

 

 

целочисленных типов в плавающие и т.п., и преобразования,

 

 

 

.

 

 

меняющие размер или знаковость целочисленного

 

 

 

A

 

 

аргумента, кроме тех, что совпадают с целочисленным

 

 

расширением.

 

 

 

Также предупреждает, если отрицательная целая константа

 

 

Wilson

 

 

 

неявно приводится к беззнаковому типу. Например,

 

 

предупреждает об присваивании x = -1, если x

 

 

беззнаковое. Предупреждение не выдается для явного

 

 

приведения типа, вроде (unsigned) -1.

-Werror

 

Делает все предупреждения сообщениями об ошибках

-Winline

 

Предупредить, если функция не может быть использована

 

 

inline, даже если она была объявлена inline или была

 

 

задана опция -finline-functions.

 

 

 

-Wlarge-than-len

 

Предупредить всякий раз, когда определяется объект, в

 

 

байтах больший, чем задано параметром len.

 

 

 

-Wlong-long

 

Предупредить, если используется тип long long

-Wno-long-long

by

 

 

(умолчание). Для подавления предупреждений используйте

 

 

-Wno-long-long. Признак предупреждений по опциям

 

 

-Wlong-long и -Wno-long-long принимается во внимание,

 

 

только если использована опция -pedantic.

 

 

 

 

Translated

 

Предупредить, если глобальная функция определена без

-Wmissing-declarations

 

 

 

предыдущего объявления. Предупреждает, даже если

 

 

определение само содержит прототип.

-Wmissing-

 

Если опция -Wformat включена, также предупредить о

format-attribu

 

функциях, которые могут быть кандидатами на использование

 

 

атрибутов формата. Заметьте, что речь идет именно о

 

 

возможных кандидатах, а не о точно заданных функциях. Эта

 

 

опция не работает, если не включена опция -Wformat.

-Wmissing-noreturn

 

Предупредить о функциях, которые могут быть кандидатами

 

 

на атрибут noreturn. Это именно возможные кандидаты, а

 

 

не точно заданные таковые функции. Следует уделить особое

 

 

внимание проверке функций вручную. Действительно, не

 

 

следует возвращаться перед использованием атрибута

 

 

noreturn, в противном случае может быть внесена

 

 

трудноуловимая ошибка генерации кода.

 

 

 

-Wmissing-prototypes

 

Предупредить, если глобальная функция определена без

 

 

предыдущего объявления прототипа. Предупреждает, даже

 

 

если определение само содержит прототип. (Это

 

 

предупреждение можно использовать, чтобы определить

 

 

глобальные функции, не объявленные в файлах заголовка.)

 

 

 

-Wnested-extern

 

Предупредить, если декларация extern встретилась внутри

 

 

функции.

 

 

 

 

-Wno-deprecated-

 

Не предупреждать о функциях, переменных и типах,

declaration

 

снабженных атрибутом deprecated.

 

 

 

-Wpadded

 

Предупредить, если заполнение включено в структуру для

 

 

выравнивания элемента структуры или для выравнивания

 

 

структуры целиком.

 

 

 

 

 

© 2008 Microchip Technology Inc.

DS51284H(ru) стр. 3-11

16-битовый компилятор Си. Руководство

ТАБЛИЦА 3-6. (ПРОД-Е) ОПЦИИ ПРЕДУПРЕЖДЕНИЙ, НЕ ПОДРАЗУМЕВАЕМЫЕ -Wall

Опция

 

 

Описание

 

 

 

-Wpointer-arith

 

Предупредить о чем-то, что зависит от размера типа функции

 

 

или от размера void. Компилятор назначает этим типам

 

 

размер = 1, для удобства вычислений с void * указателями

 

 

и указателями на функции.

 

 

 

-Wredundant-decls

 

Предупредить если что-то объявляется неоднократно в ту же

 

 

область, даже в случаях, когда многократная декларация

 

 

правомерна и ничего не изменяет.

 

 

 

 

-Wshadow

 

.

 

 

Предупредить всякий раз, когда одна локальная переменная

 

 

затеняет другую локальную переменную.

-Wsign-compare

 

Предупредить, когда сравнение знаковой и беззнаковой

-Wno-sign-compare

 

величин может дать неверный результат, если знаковая

 

 

величина преобразуетсяA

в беззнаковую. Это

 

 

Wilson

 

 

 

предупреждение также разрешается опцией -W. Чтобы

 

 

получать другие предупреждения опции -W кроме этого

 

 

предупреждения, используйте -Wno-sign-compare

-Wstrict-prototypes

 

Предупредить, если функция объявлена или определена без

 

 

задания типов аргументов. (Без предупреждения

 

 

допускается определение функции в старом стиле, если оно

 

 

предваряется декларацией, которая определяет типы

 

 

аргументов.)

 

 

 

 

-Wtraditional

 

Предупредить об отдельных конструкциях, которые ведут

 

 

себя по-разному в традиционном и ANSI Си.

 

 

Аргумент макро внутри строковой константы в теле

 

 

макроса. Это вызывает подстановку аргумента в

 

 

классическом Cи, но в ANSI Cи аргумент остается частью

 

 

строки.

 

Translated

byФункция объявляется внешней в блоке и затем используется

 

после его окончания.

 

 

 

 

 

 

Оператор switch имеет операнд типа long.

 

 

Декларация нестатической функции следует за такой же

 

 

статической. Эта конструкция не принимается некоторыми

 

 

традиционными компиляторами Си.

 

 

 

-Wundef

 

Предупредить, если неопределенный идентификатор

 

 

используется в директиве #if

 

 

 

-Wunreachab -code

 

Предупредить, если компилятор определил код, который

 

 

никогда не будет исполнен. Эта опция может выдавать

 

 

предупреждение, даже если существуют условия, при

 

 

которых часть неиспользуемой строки может быть

 

 

выполнена, так что следует проявлять определенную

 

 

аккуратность при удалении очевидно недоступного кода.

 

 

Например, для inline функции, предупреждение может

 

 

означать, что строка недоступна в только одной встроенной

 

 

копии функции.

 

 

 

 

-Wwrite-strings

 

Задание строковых констант типа const char[length] так,

 

 

что копирование их адресов в неконстантный указатель

 

 

char * приведет к предупреждению. Это предупреждение

 

 

поможет вам в поиске кода периода компиляции, который вы

 

 

пытаетесь записать в строковую константу, но только, если

 

 

вы будете очень аккуратны в использовании const в

 

 

декларациях и прототипах. В противном случае это может

 

 

просто обернуться неудобствами, из-за чего запрос данного

 

 

предупреждения и был исключен из опции -Wall.

 

 

 

 

DS51284H(ru) стр. 3-12

© 2008 Microchip Technology Inc.

Соседние файлы в папке Микропроцессорная техника Сторожок