Реферат: Turbo C++ Programer`s guide
В исходном файле
указанный макрос вызывается с неверным чис лом параметров.
Предупреждения
функция1 hides
virtual function функция2
функция1 скрывает виртуальную
функцию2
Виртуальная функция базового класса обычно переопределяется объявлением в
производном классе. В данном случае объявление того же имени с другими типами
аргументов делает функцию недоступной последующим производным классам.
идентификатор
is declared as both external and static
идентификатор объявлен сразу как
external и static
Данный идентификатор появился в объявлении, неявно или явно обозначающем
его как global или external, и кроме того, в объявлении, обозначающем его как
static. Идентификатор в таком случае считается static. Проверьте все объявления
данного идентификатора.
идентификатор
declared but never used
идентификатор объявлен, но нигде
не использован
В исходном файле указанное имя переменной объявлено как часть только что
закончившегося блока, но переменная нигде не используется. Данное
предупреждение выдается, когда компилятор встречает закрывающую фигурную скобку
составного оператора или функции. Объявление переменной находилось в начале
этого составного оператора или функции.
идентификатор
is assigned a value that is never used
идентификатору присвоено
значение, нигде не используемое
Переменная участвует в операции присвоения, но нигде в заканчивающейся
функции не используется. Предупреждение выдается, когда встречается закрывающая
фигурная скобка данной функции.
идентификатор is both a structure tag and a name, now
obsolete
идентификатор
одновременно является тегом структуры и имя,
устаревшая возможность
В С допустимо использовать идентификатор сразу как
тег структуры и имя переменной или typedef, как в следующем примере:
struct s (* int i, j; *) s;
или
typedef struct s (* int i, j; *)
s;
В С++ это недопустимо.
Ambiguous
operators need parentheses
Неоднозначные операции требуют
круглых скобок
Данное предупреждение выдается, две операции
сдвига, отношения или поразрядные логические операции используются вместе без
круглых скобок. Также это предупреждение появится, если операция вычитания
используется без скобок вместе с операцией сдвига. Программисты часто путают
приоритеты этих операций, поскольку присвоенные им приоритеты не интуитивны.
Assigning тип
to перечислимый тип
Присвоение типа перечислимому
типу
Присвоение целочисленного значения перечислимому типу. Это является
ошибкой, но выдаваемое сообщение имеет уровень предупреждения, и программа
может заработать.
Assignment to this is obsolete, use X::operator
new instead Такое присвоение устарело, используйте вместо него
X::operator new
В старых версиях С++ единственный способ управления распределением класса
объектов заключался в присвоении параметру this внутри конструктора. Теперь это
отменено, поскольку существует более эффективный, безопасный и более общий
способ, состоящий в определении функции-компонента operator new.
Base
initialization without a class name is now obsolete
Инициализация базового класса без
имени устарела
В старых версиях С++ инициализация базового класса
выполнялась за счет помещения после заголовка конструктора списка параметров
конструктора базового класса. В настоящее время рекомендуется включать имя
базового класса.
Это делает создаваемый код более понятным и необходимо в
случае множественных базовых классов.
Старый способ:
derived::derived(int i) : (i,
10) (* ... *)
Новый способ:
derived::derived(int i) :
base(i, 10) (* ... *)
Bit fields
must be signed or unsigned int
Битовые поля должны иметь тип
signed или unsigned int
Битовое поле должно быть объявлено имеющее интегральный тип со знаком или
без. В ANSI C битовое поле может быть только signed или unsigned int (а не char
или long, например).
Both return
and return with a value
Одновременно присутствуют операторы return и return
с заданным значением
Текущая функция имеет операторы return с заданным значением возврата и
без значения возврата одновременно. В С это допустимо, но практически всегда
является ошибкой. Вероятно, оператор return просто был опущен в конце функции.
Call to
function with no prototype
Вызов функции без прототипа
Это сообщение выдается в тех случаях, когда разрешено сообщение
"Prototype required" и вы вызываете функцию без первоначального
задания прототипа этой функции.
Call to
function функция with no prototype
Вызов функциифункция без
прототипа
Это сообщение выдается в тех случаях, когда разрешено сообщение
"Prototype required" и вы вызываете функцию "функция" без
первоначального задания прототипа этой функции.
Code has no
effect
Код не вызывает никаких действий
Данное предупреждение выдается, когда компилятор
встречает оператор с операциями, не выполняющими никаких действий. Например,
оператор
a + b;
не оказывает воздействия ни на какую переменную. Операция не нужна и
наверняка записана по ошибке.
Constant is
long
Длинная константа
Компилятор встретил либо десятичную константу, превышающую значение
32767, либо восьмеричную (или шестнадцатиричную) константу, превышающую
значение 65535 без следующей за ней буквы l или L. Такая константа будет
рассматриваться как имеющая тип long.
Constant
member компонент is not initialized
Константа-компонент не
инициализирована
Класс С++ имеет константу-компонент, которая не была инициализирована.
Отметим, что допустимым является инициализировать константу-компонент, а не
присваивать ей значение.
Constant out
of range in comparison
Участвующая в сравнении константа
вне допустимого диапазона
В исходном файле имеется сравнение, в котором
участвует под-выражение, лежащее вне диапазона, допустимого для прочих типов
под-выражений. Например, сравнение числа unsigned с -1 не имеет смысла. Для
того, чтобы получить константу unsigned больше 32767 (десятичное), требуется
либо явно задать приведение типа к unsigned [например, (unsigned)65535], либо
добавить к константе буквы u или U (например, 65535u).
При выдаче данного сообщения компилятор тем не менее сгенерирует код для
сравнения. Если даже данный код будет всегда давать одинаковый результат,
например при сравнении выражения типа char с 4000, код все равно будет
выполнять сравнение.
Conversion may
lose significant bits
При преобразовании могут быть
потеряны значащие биты
В операции присвоения, или в других обстоятельствах, требуется
преобразование long или unsigned long в int или unsigned int. Поскольку
переменные типов int и long имеют разный размер, такое преобразование может
привести к изменению работы программы.
Declaration
does not specify a tag or an identifier
Объявление не задает тег или
идентификатор
Данное объявление ничего не объявляет. Обычно это
структура или объединение без тега или переменная в объявлении.
Некоторые ранние компиляторы С позволяли объявления вида
struct (* int a; int b; *);
с последующим использованием a и b в качестве родовых полей для любой
переменной. выражение типа x.b разрешалось даже x не имел тип структуры. Теперь
это не практикуется, и данное сообщение поможет вам выявить все такие места в
программе.
Declare
функция prior to use in prototype
Функция должна быть объявлена до
использования в прототипе
Когда прототип функции ссылается к типу структуры,
который не был ранее объявлен, объявление внутри прототипа - это не то же
самое, что объявление вне прототипа. Например,
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 параметр
Для параметрапараметр
использовалась временная переменная
В С++ переменной или параметру типа ссылки должна
быть присвоена ссылка на объект этого же типа. Если типы не совпадают,
фактическое значение присваивается временной переменной нужного типа, а адрес
этой временной переменной присваивается переменной или параметру типа ссылки. Предупреждение
означает, что данная переменная или параметр типа ссылки относится не к тому,
чему вы ожидали, а к временной переменной; в других ситуациях это
предупреждение не выдается.
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40
|