46019 (665326), страница 44
Текст из файла (страница 44)
int func(struct s *ps);
struct s (* /* ... */ *)
Поскольку структуры s в контексте прототипа для func не существует, то типом параметра ps является указатель на неопределенную структуру s; это не то же самое, что для объявляемой после структуры s. Все это приведет к дальнейшим предупреждениям и сообщениям об ошибке, говорящих о несовместимых типах, которые будут вам непонятны без данного предупреждения. Для решения этой проблемы вы может перенести объявление структуры s до любого ссылающегося на нее прототипа, либо добавить неполное объявление типа struct s; перед каждым ссылающимся на эту структуру прототипом. Если параметром функции является структура, а не указатель структуры, то неполного объявления недостаточно; вы должны поместить полное объявление структуры перед прототипом.
Division by zero
Деление на ноль
Выражение с делением или получением остатка имеет в качестве делителя литеральный ноль.
Functions containing резервируемое слово are not expanded inline
Функции содержащие резервируемое слово не могут быть встраиваемыми
Функции, содержащие резервируемые слова do, for, while, goto, switch, break, continue и case, не могут быть встраиваемыми, даже при наличии задания их как inline. Функция может использоваться, но будет рассматриваться как обычная статическая (не глобальная) функция. Копия этой функции будет находиться в любой единице компиляции, где она вызывается.
Function should return a value
Функция должна возвращать значение
В исходном файле текущая функция определена с типом возврата иным, нежели int или void, но компилятор встретил оператор return без значения возврата. Обычно это какая-то ошибка. Исключение составляют функции int, поскольку в старых версиях С типа void для обозначения функций без значения возврата не существовало.
Hexadecimal value contains more than 3 digits
Шестнадцатиричное значение содержит более 3 цифр
В старых версиях С шестнадцатиричная управляющая последовательность могла иметь не более трех цифр. Новый стандарт ANSI позволяет любое число цифр, лишь бы значение помещалось в байт. Это сообщение выдается, когда шестнадцатиричная управляющая последовательность имеет много ведущих нулей (например, "\x00045"). Старые версии С интерпретировали бы данную строку иначе.
Ill-formed pragma
Неправильно оформленная директива pragma
Директива pragma не соответствует ни одной из ожидаемых компилятором директив этого рода.
Initialization is only partially bracketed
Инициализация только частично заключена в квадратные скобки
При инициализации структуры квадратные скобки могут отмечать инициализациюкаждого компонента структуры. Если такой компонент сам являетсямассивом или структурой, могут использоваться вложенные пары квадратных скобок. Это гарантирует совпадение ваших намерений и представления компилятора о том, какие значения к каким компонентам относятся. Если какие-то из этих необязательных скобок опущены, компилятор выдаст данное предупреждение.
Initialization with inappropriate type
Инициализация неверным типом
Переменная типа enum инициализируется значением неверного типа. Например,
enum count (* zero, one, two *) x = 2;
приведет к выводу данного предупреждения, поскольку 2 имеет тип int, а не тип enum count. При присвоении или инициализации перечислимого типа лучше пользоваться идентификаторами, определенными в данном перечислимом типе, а не целочисленными литералами.
Initializing идентификатор with тип
Инициализация идентификатора типом
Вы пытаетесь инициализировать переменную типа enum значением неверного типа. Это ошибка, но выдается только предупреждение, и программа получает шанс заработать.
Mixing pointers to signed and unsigned char
Смешанное использование указателей на signed и unsigned char
Вы преобразовали указатель на char в указатель на unsigned char, либо наоборот без явного приведения типов. (Строго говоря, это допустимо, но на 8086 часто приводит к ошибочным результатам).
No declaration for function функция
Отсутствует объявление функции
Это сообщение выдается при попытке вызова функции без ее предварительного объявления. В С можно объявить функцию без прототипа, например "int func();". В С++ каждое объявление функции является также ее прототипом; приведенный пример эквивалентен "int func(void);". Объявление может быть записано как в классическом, так и в современном (с прототипом) стиле.
Non-const function функция called for const object
Функция, не имеющая типа константы, вызвана для объекта -константы
Функция-компонент, не имеющая типа константы, вызвана для объекта типаконстанты. Это ошибка, но выдается только предупреждение, и программа получает шанс заработать.
Nonportable pointer comparison
Немобильное сравнение указателей
В вашем исходном файле указатель сравнивается с не-указателем, не являющимся нулевой константой. Если сравнение выполняется так, как вам нужно, можно использовать приведение, чтобы подавить вывод данного предупреждения.
Nonportable pointer conversion
Немобильное преобразование указателя
Ненулевое интегральное значение используется в контексте, где ожидается указатель или интегральное значение; размеры указателя и интегрального значения одинаковы. Если вы действительно намереваетесь использовать данное преобразование, следует выполнить явное приведение типов.
Obsolete syntax; use :: instead
Устаревший синтаксис; используйте ::
Старые версииС++ использовали для разделения имени компонента и имени класса в объявлениях или определениях символы точка (.) или двоеточие (:). Это устаревший способ записи; следует использовать вместо него двойное двоеточие (::).
Старый способ:
void myclass:func(int i) (* /* ... */ *)
Новый способ:
void myclass::func(int i) (* /* ... */ *)
Overload is now unnecessary and obsolete слово overload теперь не нужно и устарело
В старых версиях С++ для обозначения имен перегруженных функций служило резервируемое слово overload. Теперь С++ использует схему "безопасной с точки зрения типа компоновки", когда любая функция считается перегруженной, если не указано противоположное. Использование слова overload не требуется.
Parameter параметр is never used
Параметр не используется
Указанный параметр, объявленный в функции, нигде не используется в теле функции. Это может быть, а может и не быть ошибкой, и часто является следствием описки в параметре. Это предупреждение появляется также, если в теле функции данный параметр переобъявлен как автоматическая (динамическая локальная) переменная. Параметр маскируется автоматической переменной и не используется.
Possible use of идентификатор before definition
Возможное использование идентификатора до определения
В вашем исходном файле указанная переменная используется в выражении до того, как ей присваивается значение. Для выявление данной ситуации компилятор использует простое сканирование программы. Если использование переменной физически находится до какого-либо присвоения, то генерируется данное сообщение. Разумеется, фактически операторы управления потоком выполнения программы могут привести к тому, что присвоение данной переменной случится раньше, чем программа ее использует.
Possibly incorrect assignment
Возможно неправильное присвоение
Данное сообщение выдается в том случае, когда компилятор встречает вместо главной операции условного выражения операцию присвоения (т.е. как часть оператора if, while или do-while). Очень часто это просто опечатка. Если вы желаете подавить вывод данного сообщения, заключите присвоение в круглые скобки и выполните его явное сравнение как единого целого с нулем. Таким образом,
if (a = b) ...
следует переписать как
if ((a = b) != 0) ...
Program flow can skip this initialization; try using (**)
Поток программы может обойти данную инициализация; попробуйте использовать (**)
Инициализация длинной переменной зависит от оператора if, и потому может быть обойдено программой. Для управления контекстом этой переменной следует заключить блок в пару фигурных скобок.
Redefinition of макрос is not identical
Переопределение макроса не идентично
В исходном файле указанный макрос переопределяется с использованием текста, не идентичного тексту первого определения макроса. Новый текст заменит старый.
Restarting compile using assembly
Перезапуск компилятора с использованием ассемблера
Компилятор встретил оператор asm, не встретив перед этим опции командной строки -B или оператора #pragma inline. происходит перезапуск компилятора с включенным средством встроенного ассемблирования.
Structure passed by value
Структура передана по значению
Если выдача данного предупреждения разрешена, то оно будет генерироваться всякий раз, когда структура передается в качестве аргумента по значению. Распространенная ошибка состоит в том, что при передаче структуры как аргумента программист опускает операцию адресации &. Поскольку передача структуры по значению не запрещена, то опустить данную операцию можно. Это предупреждение сообщает вам о нерациональности ваших действий.
Style of function definition is now obsolete
Этот стиль определения функции устарел
В С++ старый стиль определения функции запрещен:
int func(p1, p2) int p1, p2; (* /* ... */ *)
Он также не допускается и многими другими компиляторами С++.
Superfluous & with function
Избыточная операция & с функцией
Операция адресации (&) с именем функции не требуется; любая подобная операция отвергается.
Suspicious pointer convercion
Подозрительное преобразование указателя
Компилятор встретил некоторое преобразование указателя, которое изменило тип, на который он указывает. Если это преобразование вам нужно, то для подавления данного предупреждения воспользуйтесь явным приведением.
Temporary used to initialize идентификатор
Для инициализации идентификатора использовалась временная переменная
Temporary used for parameter номер in call to идентификатор При вызове идентификатора для параметра номер
использовалась временная переменная
Temporary used for parameter параметр in call to идентификатор
При вызове идентификатора для параметра параметр использовалась временная переменная
Temporary used for parameter номер
Для параметраномер использовалась временная переменная
Temporary used for parameter параметр
Для параметрапараметр использовалась временная переменная
В С++ переменной или параметру типа ссылки должна быть присвоена ссылка на объект этого же типа. Если типы не совпадают, фактическое значение присваивается временной переменной нужного типа, а адрес этой временной переменной присваивается переменной или параметру типа ссылки. Предупреждение означает, что данная переменная или параметр типа ссылки относится не к тому, чему вы ожидали, а к временной переменной; в других ситуациях это предупреждение не выдается.
Например, функция f требует ссылку на int, а c имеет тип char:
f(int&);
char c;
f(c);
Вместо вызова f с адресом c компилятор генерирует код, эквивалентный следующему исходному коду С++:
int X = c, f(X);
Undefined structure идентификатор
Неопределенная структура идентификатор
Указанная структура была использована в исходном файле, возможно в указателе на нее, но не была определена в исходном файле. Это предупреждение может являться следствием опечатки в имени структуры или отсутствия объявления.
Unknown assembler instruction
Неизвестная команда ассемблера
Компилятор встретил оператор встроенного ассемблирования с недопустимым кодом операции. Проверьте написание кода операции (в Главе 6, "Интерфейс с языком ассемблера" на стр. 271 оригинала). По умолчанию вывод этого сообщения отключен.
Unreachable code
Недоступный код
За оператором break, continue, goto или return не следует метка или конец цикла или функции. Компилятор отыскивает циклы while, do и for с условным выражением типа константы и пытается распознать циклы, из которых не существует условия выхода.
Untyped bit field assumed signed int
Нетипизированному битовому полю присвоен тип signed int
Данное битовое поле не имеет спецификации типа и ему присваивается тип signed int. Некоторые компиляторы присваивают таким полям по умолчанию тип signed int. Чтобы это предупреждение не выдавалось, вы должны сами присвоить битовому полю тип int или unsigned int.
Void functions may not return a value
Функции void не могут возвращать значений
В исходном файле текущая функция объявлена с типом возврата void, а компилятор встретил оператор return, в котором задано значение возврата. Это значение игнорируется.
Приложение А Стандарты ANSI, зависящие от реализации
Некоторые аспекты стандарта ANSI C не определяются ANSI достаточно подробно. В таких случаях каждая реализация компилятора С может сама определять отношение к этим аспектам. Данная глава говорит о том, как эти зависящие от реализации стандарты определены фирмой Borland. Номера разделов соответствуют здесь публикации стандарта ANSI от декабря 1988 года, которая является самой новой. Отметим, что между С и С ++ имеются различия, а данное приложение относится исключительно к С.
2.1.1.3 Как идентифицировать диагностические сообщения
При запуске с правильной комбинацией опций любое сообщение, выдаваемое компилятором и начинающееся словами Fatal, Error или Warning, считается диагностическим в смысле, определяемом ANSI. Ниже приводятся опции, необходимые для того, чтобы обеспечивалась данная интерпретация:
Идентификация диагностических сообщений в TurboC++
Таблица A.1
Опция Действие
-A -C- -p- i32 w- wbei wdcl wcpt wdup wsus wrpt wvrt wbig wucp wstu wext wfdt | Разрешает только ключевые слова ANSI Запрещает вложенные комментарии Устанавливает использование соглашения о связях С Устанавливает минимум 32 значащих символа в идентификаторах Выключает все предупреждения, кроме следующего Включает предупреждение о несоответствии инициализаторов Включает предупреждение об объявлениях без типа или класса памяти Включает предупреждение о немобильных сравнениях указателей Включает предупреждение о дублирующихся не-идентичных определениях макроса Включает предупреждение о подозрительном преобразовании указателя Включает предупреждение о немобильных преобразованиях указателей Включает предупреждение о функции void, возвращающей значение Включает предупреждение о слишком большой константе Включает предупреждение о смешанном использовании указателей signed и unsigned char Включает предупреждение о неопределенных структурах Включает предупреждение о переменных, определенных сразу как external и static Включает предупреждение об определениях функции, использующих typedef | |
Использование следующих опций запрещено: |
-ms! Для моделей данных small SS и DS должны совпадать.