рефераты

рефераты

 
 
рефераты рефераты

Меню

Реферат: 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