Компилятор C/C++. Руководство программиста

advertisement
УДОСТОВЕРЕН
ЮФКВ.30074-01-УД
МИКРОСХЕМА ИНТЕГРАЛЬНАЯ 1879ВМ2
ПАКЕТ СРЕДСТВ РАЗРАБОТКИ С/С++ ПРОГРАММ ДЛЯ ПРОЦЕССОРОВ
NEUROMATRIX ДЛЯ ОПЕРАЦИОННЫХ ПЛАТФОРМ LINUX И WIN32
Компилятор C/C++ для платформы Win32
Руководство программиста
ЮФКВ.30074-01 33 09
(ЮФКВ.30074-01 33 09-001ФЛ)
Листов 178
Литера
Инв.N подл.
Подп. и дата
Взам.инв.N
2
ЮФКВ.30074-01 33 09
АННОТАЦИЯ
В данном документе, относящемся к программному изделию "Компилятор языка С по
стандарту ISO/IEC 9899:1990(E) и языка C++ по стандарту ISO/IEC 14882:1998(E)", определены:


использование компилятора командной строки;
особенности реализации.
3
ЮФКВ.30074-01 33 09
СОДЕРЖАНИЕ
Глава 1. Введение.....................................................................................................................................5
1.1. Книги о языке программирования С/С++ ..................................................................................6
1.2. Обзор компилятора .......................................................................................................................7
1.2.1. Типы данных ..........................................................................................................................7
1.2.2. Оптимизация ..........................................................................................................................8
1.2.3. Запуск компилятора. Командная строка..............................................................................8
1.3. Пример программы .......................................................................................................................9
Глава 2. Использование компилятора С/С++ ......................................................................................10
2.1. Переменные среды окружения ..................................................................................................11
2.2. Запуск компилятора ....................................................................................................................12
2.2.1. Командная строка ................................................................................................................12
2.2.2. Входной файл и выходной файл ........................................................................................12
2.2.3. Общий синтаксис опций .....................................................................................................12
2.2.4. Описания опций ...................................................................................................................13
2.2.5. Коды возврата ......................................................................................................................20
Глава 3. Расширение языка ...................................................................................................................21
3.1. Соглашение о вызове функций для процессоров серии NeuroMatrix ...................................22
3.1.1. Общие сведения ...................................................................................................................22
3.1.2. Передаваемые параметры функций ...................................................................................22
3.1.3. Возвращаемые функцией значения ....................................................................................23
3.1.4. Используемые и сохраняемые при вызове функции регистры .......................................23
3.2. Директивы ...................................................................................................................................24
3.2.1. Нестандартные макросы......................................................................................................24
3.2.2. Директива _asm (ассемблерные вставки) ..........................................................................24
3.2.3. Ключевые слова ...................................................................................................................25
3.3. Типы long long и unsigned long long ..........................................................................................26
3.4. Поддержка кода в соответствии с ограничениями платформы .............................................27
Глава 4. Библиотеки...............................................................................................................................28
4.1. Макрос _alloca .............................................................................................................................29
4.2. Работа с регистрами через псевдопеременные ........................................................................30
4
ЮФКВ.30074-01 33 09
4.3. Описание нестандартных функций библиотеки C ..................................................................31
4.3.1. Константы .............................................................................................................................31
4.3.2. Функции работы с окружением ..........................................................................................33
4.3.3. Дополнительные функции. .................................................................................................43
4.3.4. Функции преобразования чисел в строки и наоборот ......................................................46
4.3.5. Математические функции ...................................................................................................50
4.3.6. Функции индикации специальных значений чисел с плавающей точкой .....................52
4.4. Особенности реализации локали (местных особенностей) ....................................................56
Глава 5. Оптимизации ...........................................................................................................................57
5.1. Оптимизации, не связанные с целевой платформой ...............................................................58
5.2. Оптимизации, основанные на особенностях платформы NM6304 ........................................59
Приложение A. Нереализованные свойства ........................................................................................60
Приложение B. Диагностические сообщения компилятора ..............................................................61
5
ЮФКВ.30074-01 33 09
ГЛАВА 1. ВВЕДЕНИЕ
Язык С является языком программирования общего назначения, который позволяет
весьма эффективно использовать практически все особенности архитектуры целевой
платформы. Язык С++ является объектно-ориентированным языком программирования общего
назначения, почти полностью совместимым с С, который позволяет писать такие же
эффективные программы к на С.
6
ЮФКВ.30074-01 33 09
1.1. Книги о языке программирования С/С++
Этот список книг поможет изучить язык С/С++.
Язык программирования С++, 3-е изд.
Брайан Керниган, Денис Ритчи. /Пер. с анг. – СПб.; М.: "Невский Диалект", 2000 г. – 352
с.: ил.
Язык программирования С++, 3-е изд.
Бьерн Страуструп. /Пер. с анг. – СПб.; М.: "Невский Диалект" – "Издательство БИНОМ",
1999 г. – 991 с., ил.
Как программировать на С++
Харви Дейтл, Пол Дейтл. /Пер. с анг. - М.: ЗАО "Издательство БИНОМ", 1999 г. – 1024
с., ил.
Дизайн и эволюция С++
Бьерн Страуструп. /Пер. с анг. - М.: ДМК Пресс, 2000 г. – 448 с.: ил. (Серия "Для
программистов")
7
ЮФКВ.30074-01 33 09
1.2. Обзор компилятора
Полная поддержка языка С по стандарту ISO/IEC 9899:1990(E) (см. особенности
реализации).
Полная реализация библиотеки языка С по стандарту ISO/IEC 9899:1990(E).
Полная поддержка языка C++ по стандарту ISO/IEC 14882:1998(E) (см. особенности
реализации).
Полная реализация библиотеки языка C++ по стандарту ISO/IEC 14882:1998(E).
Поддержка особенностей архитектура процессора NM6304.
Поддержка inline ассемблера и взаимодействие ассемблерных вставок с программами на
С/С++.
Поддержка работы с системными регистрами и регистрами общего назаначения из
программ на С/С++.
1.2.1. Типы данных
Фундаментальные типы – это типы, встроенные в язык C или С++. Экземпляры этих
типов обычно называют "переменными".
1.2.1.1. Фундаментальные типы
Таблица 1.1. Типы данных
Тип данных Размер
Диапазон значений
char
1 байт -127 ... +128
unsigned char
1 байт 0 ... 255
bool
1 байт true, false
short
2 байта -32768 ... +32767
unsigned short
2 байта 0 ... 65535
int
4 байта -2147483648... +2147483647
unsigned int
4 байта 0 ... 4294967295
long
4 байта -2147483648... +2147483647
unsigned long
4 байта 0 ... 4294967295
float
4 байта ±1,176E-38 ... ±3,40E+38
double
8 байт ±1,7E-308 ... ±1,7E+308
long double
8 байт ±1,7E-308 ... ±1,7E+308
wchar_t
2 байта -32768 ... +32767
long long
8 байт -9223372036854775808 ... +9223372036854775807
unsigned long long 8 байт 0 ... 18446744073709551615
8
ЮФКВ.30074-01 33 09
1.2.2. Оптимизация
В компиляторе реализованы оптимизационные алгоритмы, которые можно включить с
помощью опции -OPT, по умолчанию все оптимизационные алгоритмы, которые могут
привести к неправильной работе компилятора или затрудняют отладку, выключены.
Алгоритмы, которые не могу иметь таких последствий – включены всегда.
1.2.3. Запуск компилятора. Командная строка
Для осмысленной работы компилятора ему необходимо предоставить дополнительную
информацию – задать имя исходного файла, указать режим работы и т.д. Эта информация
передается компилятору непосредственно в командной строке. Общий формат командной
строки такой:
<имя-исполняемого-файла-компилятора> <строка-опций>
Типовой пример:
isc.exe –I Include test.c
9
ЮФКВ.30074-01 33 09
1.3. Пример программы
Классический пример программы. Его можно скомпилировать с помощью следующей
командной строки: isc.exe –I Include hello.c. В результате успешной работы компилятора будет
создан ассемблерный файл (hello.asm), который необходимо транслировать с помощью
ассемблера (asm.exe) и собрать линкером (lnk.exe) с библиотеками (rtl.lib и clib.lib).
#include <stdio.h>
int main()
{
printf("Hello, world!\n");
return 0;
}
10
ЮФКВ.30074-01 33 09
ГЛАВА 2. ИСПОЛЬЗОВАНИЕ КОМПИЛЯТОРА С/С++
11
ЮФКВ.30074-01 33 09
2.1. Переменные среды окружения
Компилятор использует переменную окружения INCLUDE для поиска подключаемых
файлов. Дополнительные пути могут быть указаны из командной строки с помощью опции -I.
12
ЮФКВ.30074-01 33 09
2.2. Запуск компилятора
2.2.1. Командная строка
Компилятор поставляется в виде исполняемого файла isc.exe. В зависимости от
расширения файла, который подается на вход компилятора, он работает как C или С++
компилятор.
Компилятор работает как C-компилятор, если ему на вход подается файл с расширением
.c, и как C++-компилятор, если подается файл с расширением .cpp, .cxx или .cc.
2.2.2. Входной файл и выходной файл
За один запуск компилятор принимает один входной (исходный) файл и генерирует один
выходной. Исходный файл для компиляции задается в командной строке опцией -S (собственно
опцию можно опустить).
Выходной файл компилятора может содержать либо промежуточное представление, либо
информацию с выхода препроцессора (выходной файл препроцессора), либо ассемблерный
текст программы. Управление типом выходного файла производится опцией -p и -P . Имя
выходного файла можно задать опцией -O.
Выходной файл препроцессора содержит текст программы на языке С/C++, в котором
нет ни директив препроцессора (за исключением, быть может, директив #line), ни
неподставленных макросов.
По умолчанию, создается ассемблерный файл с именем входного файла и расширением
.asm
2.2.3. Общий синтаксис опций
2.2.3.1. Виды опций
Опции компилятора подразделяются на две категории: опции с аргументами и опции без
аргументов (ключи).
Опции с аргументами обозначаются прописными буквами английского алфавита. Ключи
обозначаются строчными буквами английского алфавита.
Опция должна начинаться с одного или нескольких пробельных символов, за которыми следует
символ "-" (минус) и литера, обозначающая опцию:
-E10 –p –c -W10
Ключи можно "группировать" сразу за символом "минус":
-E10 –pcl -W10
К такой "группе" ключей можно в конце добавить опцию с аргументом (но только одну):
-E10 –pclW10
13
ЮФКВ.30074-01 33 09
Аргументы опций можно (а иногда и нужно - см. ниже) отделять от литер опций одним
или нескольким пробелами:
-E 10 –pclW 10
2.2.3.2. Значения опций по умолчанию
Многие опции имеют определенные значения по умолчанию. Вхождение обозначения
опции в командную строку перекрывает (заменяет) значение по умолчанию значением,
указанным в командной строке.
По умолчанию все ключи имеют значение "ложно". Это значит, что если ключ не указан,
то считается, что соответствующий внутренний параметр компилятора имеет значение "ложно".
Если ключ указан, то соответствующий внутренний параметр компилятора принимает значение
"истинно".
Опции с аргументами не имеют значений по умолчанию, если иное не специфицировано
явно в описании соответствующей опции.
2.2.3.3. Повторные вхождения опций
Командная строка разбирается слева направо.
Если опция встречается в командной строке несколько раз, то более правое вхождение
опции называется повторным (относительно левого). В зависимости от семантики опции,
повторное вхождение либо перекрывает (заменяет) первоначальное, либо дополняет его, либо
считается ошибкой.
2.2.3.4. Общий синтаксис аргументов опций
За каждым вхождением литеры, обозначающей опцию с аргументом, должен следовать
аргумент. Аргумент – это последовательность литер (подстрока), не содержащая пробелов.
Непосредственно перед аргументом (после литеры, обозначающей опцию) допускается один
или несколько пробелов. В соответствии с семантикой опции, аргумент интерпретируется либо
как целое число, либо как текстовая строка.
Аргументы-числа должны указываться в десятичном формате. Допускаются
неотрицательные значения в диапазоне от 0 до 2147483647. В рамках конкретной опции для
аргумента-числа могут быть заданы дополнительные ограничения.
Аргументы-строки допускается заключать в двойные кавычки; это даёт возможность
вводить в них пробелы; при этом необходимо вводить после литеры, обозначающей опцию, хотя
бы один пробел. Для того, чтобы передать аргумент-строку, содержащую символ "двойная
кавычка", нужно перед каждой двойной кавычкой вставить обратную косую черту (\). Отметим,
что в рамках конкретной опции для аргументов-строк могут быть заданы дополнительные
ограничения или же задан иной синтаксис - см. описания опций.
2.2.4. Описания опций
-S
src_file
Задание исходного файла
14
ЮФКВ.30074-01 33 09
Эта опция указывает компилятору входной файл, который следует обработать.
Параметр src_file указывается в соответствии с правилами, принятыми в
используемой операционной системе. Компилятор не делает никаких
предположений о расширении имен исходных файлов. Как следствие, его всегда
нужно указывать явно. Собственно текст опции ( -S ) разрешается опускать.
Если путь к исходному файлу не указан, то компилятор ищет его в текущем
каталоге. Если путь указан, то компилятор ищет исходный файл именно там. Путь
может быть указан в "относительном" виде; если это так, то компилятор использует
в качестве точки отсчета текущий каталог.
Пример:
-S file.cpp
-S "..\my sources\file.c"
c:\myproj\file.cpp
Задание имени выходного файла
-O
out_file
Эта опция указывает компилятору имя и расположение выходного файла. Параметр
out_file указывается в соответствии с правилами, принятыми в используемой
операционной системе. Допускается не указывать путь, имя и расширение
выходного файла; при этом компилятор использует установки по умолчанию. По
умолчанию, у имени входного файла меняется расширение на .asm (при опции -P2)
или .ir (при опции -P0).
Путь может быть указан в "относительном" виде; если это так, то компилятор
использует в качестве точки отсчета текущий каталог.
-O ofile1.ttt
-O ..\OBJ\ofile2.t3
-O c:\myproj\ofile3
Задание путей поиска включаемых файлов
Эта опция устанавливает список путей (спецификаций каталогов), который будет
использоваться компилятором для поиска включаемых файлов, для которых не
указано точное местонахождение.
-I ipath
ipath - это список спецификаций каталогов, отделенных друг от друга точками с
запятой; их синтаксис должен соответствовать принятому в используемой
операционной системе. Спецификация некоторого каталога может быть в
"относительном" виде; в этом случае каталог, в котором выполняется поиск,
компилятор находит объединением спецификации текущего каталога и
"относительного" пути.
ipath при поиске включаемого файла просматривается слева направо. В случае
повторного вхождения данной опции, список каталогов, указанный в командной
строке позже (правее) просматривается перед путями, указанными в командной
строке раньше (левее). Например, если указать опции -I 1;2 -I 3;4, то порядок
просмотра будет таким: 3, 4, 1, 2.
15
ЮФКВ.30074-01 33 09
Замечания
Поиск в каталогах, указанных опцией -I, осуществляется раньше, чем
в переменной окружения INCLUDE
Компилятор не осуществляет поиск включаемого файла по списку
каталогов только в случае, если в соответствующей директиве
#include указан "абсолютный" путь к файлу. Отметим, что если указан
"относительный" путь, то компилятор выполняет поиск.
Если в директиве #include были использованы угловые скобки, и не
был указан путь, то файл ищется только по каталогам, перечисленным
в опциях -I и переменной окружения INCLUDE. Если же в #include
были использованы двойные кавычки, и не был указан путь, поиск
производится в таком порядке:



в том же каталоге, в котором находится исходный файл,
в текущем каталоге,
по каталогам, перечисленным в опциях -I и переменной
окружения INCLUDE.
Если в директиве #include был использован "относительный" путь, то
поиск производится так же, как и для случая, когда путь к файлу
вообще не указан. Однако при поиске компилятор добавляет к
спецификациям каталогов "относительный" путь из директивы
#include
Пример:
Запуск компилятора:
C:\Prj\Src\Obj > isc.exe -IC:\Prj\Inc;INC -S..\a.cpp
Файл C:\Prj\Src\a.cpp :
#include "Sub/inc.hpp"
Поиск файла inc.hpp производится в таком порядке и в таких каталогах:
C:\Prj\Src\Sub
C:\Prj\Src\Obj\Sub
C:\Prj\Inc\Sub
C:\Prj\Src\Obj\INC\Sub
Включить в командную строку опции из файла
-A
opt_file
Эта опция включает в командную строку содержимое некоторого файла (будем
называть его далее файлом опций). Это позволяет обойти ограничения на размер
командной строки, имеющиеся во многих ОС. Параметр opt_file указывается в
соответствии с правилами, принятыми в используемой операционной системе.
16
ЮФКВ.30074-01 33 09
Если путь к файлу опций не указан, то компилятор ищет его в текущем каталоге.
Если путь указан, то компилятор ищет исходный файл именно там. Путь может
быть указан в "относительном" виде; если это так, то компилятор использует в
качестве точки отсчета текущий каталог.
При чтении файла опций компилятор игнорирует символы "возврат каретки" и
"перевод строки" (за исключением того, что эти символы не должны встречаться
внутри опций), поэтому файл опций может состоять из произвольного количества
строк. Кроме того, поддерживаются комментарии. Комментарий может находиться
в любой строке файла опций; он должен начинаться с символа '#', и заканчивается с
концом этой строки. Для файла опций нет ограничений по размеру.
Пример:
-A options.opc
-A "..\My Sources\options.opc"
-A c:\myproj\opt1.opc
Определение макроса
Предписывает компилятору определить макрос с указанным именем и указанным
значением. Предоставляет пользователю возможность определить макрос или
несколько макросов без модификации исходных текстов программы. Использование
этой опции полностью аналогично использованию директивы #define в самом
начале модуля (перед всеми строками исходного файла; как бы в "нулевой" строке).
Варианты использования этой опции соответствуют добавлению следующих
директив в исходный текст программы:
Опция -D macro_name=macro_text соответствует директиве:
#define macro_name macro_text
-D
name=text
Опция -D macro_name соответствует такой директиве:
#define macro_name
Семантика полностью соответствует семантике для директив #define, для случая
определения макросов без параметров. В частности: если значение макроса не
указано, то оно устанавливается пустым; многократное появление этой опции в
командной строке для одних и тех же имен макросов обрабатывается как
последовательное использование директив #define для одного и того же имени
макроса, и т.д. Случаи, когда одновременно с данной опцией в командной строке
используется опция -U, рассматриваются как соответствующая последовательность
директив #define и #undef.
Эта директива не дает возможности определять макросы с параметрами
Пример:
-D FOO=1
17
ЮФКВ.30074-01 33 09
-D MOO
-D "ZOO=(FOO + MOO)"
-D "POO=\"строка с пробелом\""
Удаление определения макроса
Предписывает компилятору удалить определение макроса с указанным именем,
заданного в командной строке левее этой опции. Использование этой опции
полностью аналогично использованию директивы #undef в самом начале модуля
(перед всеми строками исходного файла; как бы в "нулевой" строке).
-U name
macro_name соответствует директиве:
#undef macro_name
Семантика полностью соответствует семантике для директив #undef.
Эта директива может удалить только макрос, определенный левее командной
строке.
Выполнять только препроцессирование
-p
Предписывает компилятору сгенерировать файл, содержащий информацию с
выхода препроцессора. Файл промежуточного представления в этом случае не
генерируется.
Необходимо указать имя выходного файла при помощи опции -O (см. "Задание
имени выходного файла").
Выводить комментарии в выходной файл препроцессора
-c
-E max_err
-W
max_warn
-w
Предписывает компилятору сохранять комментарии во время препроцессирования;
в результате они остаются в выходном файле препроцессора. Отметим, что имеет
смысл только при совместном использовании с опцией -p.
Задание предельного числа сообщений об ошибках
Предписывает компилятору прервать трансляцию, как только число обнаруженных
ошибок достигнет max_err. Такая ситуация трактуется компилятором как
фатальная ошибка, о чем выдается соответствующее сообщение. Значение по
умолчанию: 25.
Задание предельного числа предупреждений
Предписывает компилятору прервать трансляцию, как только количество
выведенных предупреждений достигнет max_warn. Такая ситуация трактуется
компилятором как фатальная ошибка, о чем выдается соответствующее сообщение.
Значение по умолчанию: 100000.
Не выводить предупреждения
По умолчанию, компилятор выводит на консоль все предупреждения (см. также
описание опции "Задание предельного числа предупреждений"; эта опция
предписывает компилятору не выводить никаких предупреждений).
Если указана опция -w , то опция -W max_warn не будет работать, что является
18
ЮФКВ.30074-01 33 09
косвенным эффектом.
Отключение предупреждений с номером XXXX
-wnXXXX
Предписывает компилятору не выводить предупреждения с номером XXXX.
Формировать сложный код возврата, а не простой (0 и не 0)
-q
Эта опция позволят получить в коде возврата более детальную информации о
результате компиляции.
Задать фазы компиляции
Эта опция указывает компилятору, какую из фаз компиляции следует выполнить.
Она может принимать два значения:
-Pphase


0 - проверяется синтаксис исходной программы, выходной файл содержит
промежуточное представление (если не указана опция) ;
2 - происходит полная компиляция. На выходе получается ассемблерный
файл. Используется по умолчанию.
Между буквой опции и числом фаз компиляции не должно быть пробелов.
Задать уровень оптимизации
Эта опция задает уровень оптимизирования выходного кода программы. Опция
может принимать одно из следующих значений:
-OPTlevel



0 - оптимизация выключена. Используется по умолчанию;
1 - простая оптимизация;
2 - сложные оптимизации.
Между буквой опции и степенью оптимизации не должно быть пробелов.
Выключение генерации отладочной информации
-i
-except
-rtti
По умолчанию, отладочная информация генерируется. Эта опция предписывает
компилятору отключить генерацию.
Выключение поддержку генерации исключительных ситуаций.
Только С++. По умолчанию, генерируется поддержка для исключительных
ситуаций. Эта опция предписывает компилятору отключить генерацию кода для
поддержки исключительных ситуаций, результирующий код будет быстрее
работать.
Выключение поддержку RTTI.
Только С++. По умолчанию, генерируется поддержка для RTTI (dynamic_cast и
typeid). Эта опция предписывает компилятору отключить генерацию кода для RTTI,
результирующий код будет меньше по размеру.
Подключить файл после исходного текста
-Iafile
-Ibfile
Добавляет все содержимое файла file в конец исходного текста.
Подключить файл до исходного текста
19
ЮФКВ.30074-01 33 09
Добавляет все содержимое файла file перед началом исходного текста.
Установка кодировки исходного файла
Предписывает компилятору воспринимать исходный текст так, как будто он
написан в указанной кодировке. Допустимые значения codepage:
"en_US.850" - английский язык, кодировка 850;
"ru_RU.1251" - русский язык, кодировка 1251 (Windows);
"ru_RU.866" - русский язык, кодировка 866 (DOS).
-Сcodepage
Если указана опция -C"ru_RU.1251" или -C"ru_RU.866", то выходной файл будет в
кодировке 1251.
Если указана опция -C"en_US.850" , то выходной файл будет в кодировке 850.
Значение по умолчанию "en_US.850" (английский язык, кодировка 850).
Пример:
-C "ru_RU.1251"
-Cen_US.850
Установка языка и кодировки сообщений компилятора
Предписывает компилятору выводить все диагностические сообщения на указанном
языке и в указанной кодировке. Допустимые значения codepage:
"en_US.850" - английский язык, кодировка 850;
"ru_RU.1251" - русский язык, кодировка 1251 (Windows);
Mcodepage
"ru_RU.866" - русский язык, кодировка 866 (DOS).
Значение по умолчанию "en_US.850" (используется английский язык, кодировка
850).
Пример:
-M "ru_RU.1251"
-Men_US.850
Выбор нотации
-Tc
Сообщает компилятору, что на вход подается текст на языке C (ISO/IEC 9899:1990).
Выбор нотации
-Tc99
Сообщает компилятору, что на вход подается текст на языке C (ISO/IEC 9899:1999) .
20
ЮФКВ.30074-01 33 09
Выбор нотации
-Tp
Сообщает компилятору, что на вход подается текст на языке C++.
Вывести краткий перечень опций
-?
Эта опция предписывает компилятору вывести на консоль список поддерживаемых
опций с их краткими описаниями. Описание выводится на английском языке.
2.2.5. Коды возврата
Код возврата может использоваться для определения результатов работы компилятора.
По умолчанию он 0 при успешной компиляции и не нулевой при ошибках. При использовании
опции -q , он содержит информацию, позволяющую определить результат в целом (успешная
компиляция или были ошибки и проч.), а также номер последнего диагностического сообщения,
сгенерированного компилятором.
Код возврата передается операционной системе в соответствии с принятыми в ней
правилами.
Таблица 2.1. Кода возврата компилятора при использовании опции -q
Результат работы компилятора
Код возврата
Не было ни ошибок, ни предупреждений
0
Были предупреждения, ошибок не было
1 + ( message number * 256)
Были нефатальные ошибки и, возможно, предупреждения
2 + ( message number * 256)
Были фатальные ошибки и, возможно, ошибки и предупреждения 3 + ( message number * 256)
message number – это номер последнего диагностического сообщения, выданного
компилятором.
21
ЮФКВ.30074-01 33 09
ГЛАВА 3. РАСШИРЕНИЕ ЯЗЫКА
22
ЮФКВ.30074-01 33 09
3.1. Соглашение о вызове функций для процессоров серии NeuroMatrix
3.1.1. Общие сведения
Таблица 3.1. Размеры и выравнивания базовых типов данных C++
Имя
типа
char
short
int
long
void *
float
double
long
double
Размер в словах
процессора
1
1
1
2
1
1
2
Количество значимых
бит
8
16
32
64
32
32
64
Выравнивание типа данных в
памяти
1
1
1
2
1
1
2
2
64
2
Замечание
Размер типа данных совпадает с выравниванием данного типа в памяти.
Обращение в память для чтения 64-х битного длинного слова возможно только по
четному адресу. Вызов функции возможен, только когда регистр указатель стека имеет четное
значение.
3.1.2. Передаваемые параметры функций
Все параметры функции передаются через стек. Для базовых типов данных в стеке
передается сам параметр. Для структурных типов данных (структуры, классы, объединения) в
стеке передается указатель на структуру.
Компилятор может порождать дополнительные, неявные параметры для функций. Для
функций, возвращающих структурный тип данных, добавляется параметр - указатель на область
стека в которой располагается структура. Если у функции имеется такой параметр, то он
предшествует всем остальным явным и неявным параметрам. Для функций членов класса
компилятор порождает неявный параметр - указатель на объект класса (this). Такой параметр
предшествует всем явным параметрам. Если у функции имеется два неявных параметра указатель на возвращаемую структуру и указатель this, то первым параметром является
указатель на возвращаемую структуру, вторым указатель this, затем идут явные параметры.
Параметры размещаются в стеке начиная с последнего, т.е. первый параметр имеет
наибольший адрес, последний параметр имеет наименьший адрес.
Выравнивание параметров в памяти соответствует обычному выравниванию переменных
такого типа. При этом в стеке могут образовываться неиспользуемые места. Такие
неиспользуемые места имеют размер 1 слово и располагаются по четным адресам. Поскольку,
при выполнении инструкции перехода к подпрограмме, указатель стека должен иметь четное
23
ЮФКВ.30074-01 33 09
значение, выравнивание параметров производится относительно места в стеке, где
располагаются PC и PSW при переходе к подпрограмме.
3.1.3. Возвращаемые функцией значения
Функция возвращает значение в регистрах. Значения типов - char, short, int, float
возвращаются в регистре gr7. Значения типов long, double, long double возвращаются в регистрах
gr6, gr7, причем в регистре gr6 находится старшая часть значения, а в регистре gr7 - младшая.
Значения указательных типов (преобразуемых к void *) возвращаются в регистре ar5. Если
функция возвращает значение структурного типа, то в регистре ar5 возвращается указатель на
структуру. Следует отметить, что возвращаемая структура может располагаться в стеке как
ниже, так и выше вершины стека.
3.1.4. Используемые и сохраняемые при вызове функции регистры
Соглашение о вызове функций регламентирует обращение только с регистрами ar0-ar7,
gr0-gr7:




Значения регистров ar0-ar4, ar6, gr0-gr5 сохраняются.
Значения регистров ar5 и gr7 не сохраняются.
Значение регистра gr6 сохраняется в том случае, если он не используется для возврата
части длинного значения.
Регистр ar7 или sp имеет специальной значение указателя на вершину системного стека и
после возврата из функции должен иметь прежнее значение.
Действия функций с другими регистрами (не входящими в число ar0-ar7, gr0-gr7) не
регламентируются данным соглашением.
24
ЮФКВ.30074-01 33 09
3.2. Директивы
3.2.1. Нестандартные макросы
Компилятор содержит набор встроенных макросов (без параметров), которые могут
использоваться, например, для повышения информативности диагностических сообщений,
определенных пользователем, повышения мобильности программ, условной трансляции в
зависимости от указанных опций и т.д.
Имена встроенных макросов запрещено использовать в директивах define, undef.
Следует отметить, что какие-либо иные реализации Си++ (компиляторы других
компаний) могут содержать одноименные нестандартные встроенные макросы, причем их
семантика и возвращаемое значение почти наверняка будут отличаться от принятых в нашем
компиляторе. Вероятность этого невелика, но она существует. Поэтому если требуется писать
потенциально переносимый код, и при этом пользоваться нестандартными макросами, мы
рекомендуем такой подход:
#ifdef __ISCPP__
/*
здесь пользуемся нестандартными макросами
*/
#endif
__ISCPP__
Раскрывается в целый десятичный литерал, обозначающий версию компилятора (сейчас
300). Этот макрос позволяет определить, является ли компилятор, который обрабатывает
исходный файл, компилятором C/С++ производства нашей компании. В таком случае этот
макрос определен и расширяется в номер версии компилятора (десятичный литерал; например,
1234 для версии 12.34). При трансляции другим компилятором, этот макрос, скорее всего, не
будет определен. Поэтому можно использовать директивы #ifdef/#ifndef, чтобы при обработке
нашим компилятором использовался один вариант исходного текста, а при трансляции любым
другим компилятором – другой.
__NEUROMATRIX__
Раскрывается в целый десятичный литерал равный 1.
Этот макрос позволяет определить, что целевой платформой, для которой компилируется
исходный текст, является микропроцессор NM6304.
3.2.2. Директива _asm (ассемблерные вставки)
Иногда появляется необходимость использовать в теле программы написанной на C/C++
ассемблерные инструкции. Синтаксис ассемблерных вставок следующий:
_asm {
// код на ассемблере
}
25
ЮФКВ.30074-01 33 09
Код на ассемблере просто переносится в результирующий (после работы компилятора)
ассемблерный файл. При этом производятся следующие подстановки (только в случае, если
соответствующие идентификаторы не совпадают с ключевыми словами ассемблера):



вместо имени глобальной переменной подставляется соответствующая ей метка
имени функции подставляется соответствующая ей метка
вместо имени локальной переменной текущей функции подставляется её смещение
относительно указателя на окно стека (frame pointer) функции
Открытие/закрытие секций во встроенном ассемблере запрещено. Определение и использование
меток разрешено, но первым символом в имени метки не должна быть латинская заглавная
буква ‘L’. Также не рекомендуется определять метки, имя которых начинается с символа
подчёркивания (‘_’), т.к. это имя может совпасть с меткой, соответствующей какой-либо из
функций, написанных на C/C++ (пользовательской или библиотечной). Все макросредства и
директивы разрешены.
Использование встроенного ассемблера разрешено только внутри тела функций.
3.2.3. Ключевые слова
В реализации данного компилятора добавлены несколько новых ключевых слов. Они все
включены в следующей таблице:
Таблица 3.2. Ключевые слова
__int64 _asm __asm
26
ЮФКВ.30074-01 33 09
3.3. Типы long long и unsigned long long
Типы long long и unsigned long long – 64-битные целочисленные типы, знаковый и
беззнаковый соответственно. Их можно использовать во всех языковых конструкциях, где
разрешены все другие целочисленные типы. Для них существует поддержка со стороны
библиотеки, аналогичная таковой поддержке для других целочисленных типов.
К примеру, в заголовочном файле limits.h содержатся макросы LLONG_MIN,
LLONG_MAX и ULLONG_MAX, обозначающие соответственно минимальное и максимально
значения типа long long и максимальное значение типа unsigned long long.
О поддержке этих типов дополнительно можно посмотреть в главе Раздел 4.3.4,
«Функции преобразования чисел в строки и наоборот»
27
ЮФКВ.30074-01 33 09
3.4. Поддержка кода в соответствии с ограничениями платформы
Генерируемый компилятором код соответствует ограничениям аппаратной платформы на
следование инструкций. Достигается это путём вставления инструкций nop между инструкциями.
28
ЮФКВ.30074-01 33 09
ГЛАВА 4. БИБЛИОТЕКИ
Стандартные заголовочные файлы для библиотеки С и заголовочные файлы поддержки
языка С++ находятся в подкаталоге Include каталога установки. Заголовочные файлы полной
библиотеки С++ находятся в подкаталоге STL; при их использовании не нужно добавлять в пути
поиска заголовочных каталог Include.
Библиотечные файлы находятся в подкаталоге Lib каталога установки. Библиотка rtl.lib
содержит функции поддержки языка С, она необходима для любых программ написанных на
С/С++. Библиотека clib.lib содержит функции Стандартной библиотеки С. Библиотека cpplib.lib
содержит функции поддержки языка С++. Библиотека stllib.lib содержит функции Стандартной
библиотеки С++.
29
ЮФКВ.30074-01 33 09
4.1. Макрос _alloca
Макрос _alloca предназначен для выделения памяти в стеке, в «окне» стека (stack frame)
текущей функции, для нужд временного хранения информации. Таким образом память
выделяется гораздо быстрее, чем с помощью функции malloc(), и не требует специального
освобождения (освобождается автоматически при выходе из функции).
Параметр макроса – размер памяти, который необходимо выделить, в байтах. Результат
макроса – указатель типа void* на выделенную память. Память, выделенную с помощью _alloca,
можно использовать до выхода из функции, в которой она была выделена (в том числе и в
вызванных из неё функциях).
Для использования макроса _alloca необходимо включить заголовочный файл malloc.h.
30
ЮФКВ.30074-01 33 09
4.2. Работа с регистрами через псевдопеременные
Для удобства обращения с регистрами напрямую из C/C++ программы, поддержаны
регистровые псевдопеременные. Чтобы прочесть значение из регистра, достаточно прочесть
значение соответствующей переменной. Аналогично, чтобы записать значение в регистр,
достаточно присвоить его соответствующей переменной. Переменные, соответствующие
регистрам, запись в которые запрещена, имеют тип с модификатором const.
Таблица 4.1. Регистры и регистровые пары, доступные по чтению/записи.
Регистры
ar0 ... ar7(sp)
gr0 ... gr7
icc0
ica0
icc1
ica1
occ0
oca0
occ1
oca1
t0
t1
pswr
Pc
lmicr
Gmicr
Регистровые пары
(ar0, gr0) ... (ar7, gr7)
(icc0, ica0)
(icc1, ica1)
(occ0, oca0)
(occ1, oca1)
(t0, t1)
(pswr, pc)
-
Таблица 4.2. Регистры и регистровые пары, доступные только по записи.
Запись 32-разрядных слов
nb1l
nb1h
sbl
Sbh
f1crl
f1crh
f2crl
f2crh
vrl
Vrh
Запись 64-разрядных слов
nb1
sb
f1cr
f2cr
vr
Имена регистровых псевдопеременных состоят из двух символов подчеркивания "_" и
имени соответствующего регистра.
__ar0 … __ar7, __gr0 … __gr7, __icc0, __icc1, __nb1l, __nb1 …
Аналогичным образом могут быть прочитаны/присвоены значения регистровым парам.
Имена соответсвующих регисровым парам псевдопеременных формируются аналогичным
образом: два символа подчеркивания "_" и имена регистров пары.
__ar0gr0, __ar1gr1, __ar7gr7, __icc0ica0 ...
Псевдоперемнные объявлены в заголовочном файле neuromatrix.h.
Внимание
Регистры используются в исполняемой программе (явно используются регистры
общего назначения и аккумулятор, неявно используются некоторые системные
регистры). Неправильное использование регистровых псевдопеременных может
привести к непредсказуемым результатам.
31
ЮФКВ.30074-01 33 09
4.3. Описание нестандартных функций библиотеки C
4.3.1. Константы
4.3.1.1. Файловые константы
Стоит отметить, что пользоваться такими флагами можно только посредством
низкоуровневых функций работы с окружением. Флаги _O_SEQUENTIAL и _O_RANDOM
используются как «подсказки» библиотеке для оптимизации доступа к жесткому диску.
_O_RDONLY
Файл открыт только на чтение.
_O_WRONLY
Файл открыт только для записи.
_O_RDWR
Файл открыт для чтения и записи.
_O_APPEND
Каждый раз при записи, передвигает указатель в конец файла.
_O_CREAT
Создать и открыть файл.
_O_TRUNC
Открыть и удалить содержимое. Необходимо разрешение на запись в файл, при
совместном использовании с _O_CREAT открывает существующий, или создает новый
файл.
_O_EXCL
Открывает только в том случае, если файла не существует.
_O_TEXT
Открывает файл в текстовом режиме.
_O_BINARY
Открывает файл в бинарном режиме.
_O_NOINHERIT
Дочерний процесс не наследует файл.
32
ЮФКВ.30074-01 33 09
_O_TEMPORARY
Временный файл. Файл уничтожается, когда уничтожается последний файловый
дескриптор. Используется вместе с _O_CREAT.
_O_SHORT_LIVED
Создается временный файл, из которого по возможности не пишут на диск. Используется
вместе с _O_CREAT.
_O_SEQUENTIAL
Доступ к данным файла происходит последовательно.
_O_RANDOM
В отличие от предыдущего флага, этот явно говорит о произвольности доступа к данным.
4.3.1.2. Поля структуры _fstat
Таблица 4.3. Описание полей _fstat
Поле
Описание
st_atime Время последнего обращения к файлу.
st_ctime Время создания файла.
Значение 0 соответствует дисковому файлу. Если файл является устройством, то
st_dev
переменная принимает значение дескриптора этого файла.
st_mode Битовая маска.
st_mtime Время последней модификации файла.
st_nlink Всегда 1 на файловых системах отличающихся от NTFS.
Значение 0 соответствует дисковому файлу. Если файл является устройством, то
st_rdev
переменная принимает значение дескриптора этого файла.
st_size Размер файла в байтах.
4.3.1.3. Константы неопределенностей
Некоторые функции и операции с типами с плавающей точкой могут возвращать
следующие специальные значения (без скобок указано имя для типа double, в скобках - для типа
float; соответствующие значения различны, но имеют одинаковый смысл для этих типов). О
функциях работы с этими константами см. Раздел 4.3.6, «Функции индикации специальных
значений чисел с плавающей точкой».
_dqnan (_fqnan)
NaN (Not a Number) – не число. Например, 0/0 или ∞/∞.
_dsignan (_fsignan)
33
ЮФКВ.30074-01 33 09
signaling NaN – сигналящее не число. При использовании вызывает (raise)
соответствующий сигнал.
_dposinf (_fposinf)
INF (INFinity) – положительная бесконечность. Например, 1/0
_dneginf (_fneginf)
INF (INFinity) – отрицательная бесконечность. Например, -1/0
4.3.2. Функции работы с окружением
Все функции являются низкоуровневыми аналогами функций работы с файлами из
стандартной библиотеки. Например, функция _open() аналог функции fopen() из стандартной
библиотеки, а функция _close() аналог fclose() и так далее.
4.3.2.1. _open
Открытие файла.
Функция Заголовочный файл
_open
__replace.h
Заголовок:
_HANDLE _open (fileName,
oflags);
const char* fileName ;
unsigned oflags ;
Описание:
Функция _open открывает файл, указанный в fileName. Способ открытия файла
указывается в параметре oflags. Возможные флаги перечислены в главе Раздел 4.3.1.1,
«Файловые константы».
Возврат:
Функция возвращает дескриптор файла. В случае ошибки возвращается нуль.
Пример:
#include
#include
#include
#include
<stdlib.h>
<stdio.h>
<__replace.h>
<malloc.h>
char buf[120];
int main()
{
_HANDLE fh;
size_t nbytes = 100, bytesread;
/* Файл read.c открывается на чтение */
if ((fh = _open("read.c", _O_RDONLY|_O_TEXT)) == -1)
34
ЮФКВ.30074-01 33 09
{
perror( "open failed on input file" );
exit( 1 );
}
/* В случае успешного открытия, из файла считывается bytesread байт */
if (( bytesread = _read( fh, buf, nbytes ) ) <= 0 )
perror( "Problem reading file" );
else // выводиться реальное количество считанных байт
printf( "Read %u bytes from file\n", bytesread );
_close( fh );
}
Также см.:
Раздел 4.3.2.2, «_close» Раздел 4.3.2.3, «_read»
4.3.2.2. _close
Закрытие файла.
Функция Заголовочный файл
_close
__replace.h
Заголовок:
void _close (file);
_HANDLE file ;
Описание:
Функция _close закрывает поток. Перед закрытием сбрасываются все буферы, связанные
с этим потоком. В качестве аргумента принимает дескриптор файла.
Возврат:
Возвращаемое значение – 0 в случае неудачи, при этом errno принимает значение
EBADF В случае успеха возвращается не нулевое значение.
Пример:
см. пример для Раздел 4.3.2.1, «_open»
Также см.:
Раздел 4.3.2.1, «_open»
4.3.2.3. _read
Чтение из файла.
Функция Заголовочный файл
_read
__replace.h
Заголовок:
35
ЮФКВ.30074-01 33 09
size_t _read (file,
buf,
size);
_HANDLE file ;
void*
buf ;
size_t
size ;
Описание:
Функция _read считывает из файла file в буфер buf не больше size байт. Чтение
начинается с байта, на который указывает файловый указатель. После чтения файловый
указатель находится на следующем не считанном байте.
Возврат:
Возвращаемое значение – число прочитанных байт, которое может быть меньше, чем
указанное в size. В случае ошибки функция вернет -1.
Пример:
см. пример для Раздел 4.3.2.1, «_open»
Также см.:
Раздел 4.3.2.1, «_open» Раздел 4.3.2.4, «_write»
4.3.2.4. _write
Запись в файл.
Функция Заголовочный файл
_write
__replace.h
Заголовок:
size_t _write (file,
buf,
size);
_HANDLE file ;
void*
buf ;
size_t
size ;
Описание:
Функция _write записывает в файл file данные, считанные из буфера buf. В файл
записывается не больше size байт.
Возврат:
36
ЮФКВ.30074-01 33 09
Возвращаемое значение – число записанных байт, которое может быть меньше, чем
указанное в size. В случае ошибки функция вернет -1.
Пример:
#include <stdio.h>
#include <stdlib.h>
#include <__replace.h>
char buffer[] = "This is a test of '_write' function";
int main(){
int fh;
unsigned byteswritten;
if((fh = _open("write.o", _O_RDWR | _O_CREAT)) != -1)
{
if(( byteswritten = _write(fh,
buffer, sizeof(buffer))) == -1)
perror( "Write failed" );
else
printf( "Wrote %u bytes to file\n", byteswritten );
_flush(fh);
_close( fh );
}
}
Результат:
Wrote 36 bytes to file
Также см.:
Раздел 4.3.2.1, «_open» Раздел 4.3.2.3, «_read»
4.3.2.5. _flush
Сброс содержимого буфера в файл.
Функция Заголовочный файл
_flush
__replace.h
Заголовок:
int _flush (file);
_HANDLE file ;
Описание:
Функция _flush очищает содержимое буфера файла, записывая информацию на диск. В
качестве аргумента принимает дескриптор файла file.
Возврат:
В случае успеха возвращается не нулевое значение.
Пример:
см. пример для Раздел 4.3.2.4, «_write»
Также см.:
37
ЮФКВ.30074-01 33 09
Раздел 4.3.2.2, «_close»
4.3.2.6. _getpos
Получить значение индикатора текущей позиции файла.
Функция Заголовочный файл
_getpos __replace.h
Заголовок:
int _getpos (file,
pos);
_HANDLE file ;
fpos_t*
pos ;
Описание:
Функция _getpos получает значение индикатора текущей позиции файла file, в объекте,
на который указывает второй аргумент pos. Полученное значение содержит значение,
которое использует функция _setpos при обратном позиционировании для
позиционирования на сохранённую позицию.
Возврат:
Возвращаемое значение – 0 в случае ошибки, любое положительное число в случае
успешного выполнения.
Также см.:
Раздел 4.3.2.7, «_setpos»
4.3.2.7. _setpos
Установить значение индикатора текущей позиции файла.
Функция Заголовочный файл
_setpos __replace.h
Заголовок:
int _setpos (file,
pos);
_HANDLE file ;
const fpos_t* pos ;
Описание:
Функция _setpos устанавливает значение индикатора текущей позиции файла file, в
соответствии с объектом, на который указывает второй аргумент pos. Значение pos
должно быть получено предшествующем вызовом функции _getpos. При успешном
выполнении функции очищается индикатор конца файла.
38
ЮФКВ.30074-01 33 09
Возврат:
Возвращаемое значение – 0 в случае ошибки, любое положительное число в случае
успешного выполнения. При успешном выполнении функции очищается индикатор
конца файла.
Также см.:
Раздел 4.3.2.6, «_getpos»
4.3.2.8. _rename
Переименовать файл или каталог.
Функция Заголовочный файл
_rename __replace.h
Заголовок:
int _rename (oldName,
newName);
const char* oldName ;
const char* newName ;
Описание:
Функция _rename переименовывает файл или каталог. Аргументы это старое и новое
имена соответственно.
Возврат:
Возвращаемое значение – 0 в случае ошибки, любое положительное число в случае
успешного выполнения.
Пример:
#include <stdio.h>
#include <__replace.h>
void main( void )
{
int result;
char old[] = "main1.c";
char nnew[] = "_main1.c";
/* Attempt to rename file: */
result = _rename( old, nnew );
if( result != 0 )
printf( "Could not rename '%s'\n", old );
else
printf( "File '%s' renamed to '%s'\n", old, nnew );
}
39
ЮФКВ.30074-01 33 09
Результат:
File 'main1.c' renamed to '_main1.c'
Также см.:
Раздел 4.3.2.9, «_remove»
4.3.2.9. _remove
Удалить файл.
Функция Заголовочный файл
_remove __replace.h
Заголовок:
int _remove (path);
const char* path ;
Описание:
Функция _remove удаляет файл.
Возврат:
Возвращаемое значение – 0 в случае успешного выполнения. Если будет попытка
удаления файла с атрибутом read-only, функция вернет код ошибки – 1. В случае если
путь к файлу не найден функция вернет 2.
Пример:
#include <stdio.h>
#include <__replace.h>
void main( void )
{
if( _remove( "_main1.c.obj" ) == -1 )
perror( "Could not delete '_main1.c'" );
else
printf( "Deleted '_main1.c'\n" );
}
Результат:
Deleted '_main1.c'
Также см.:
Раздел 4.3.2.8, «_rename»
4.3.2.10. _time
Определить системное время.
Функция Заголовочный файл
_time
__replace.h
Заголовок:
40
ЮФКВ.30074-01 33 09
time_t _time (timer);
time* timer ;
Описание:
Функция _time определяет календарное время. Результат возвращается в секундах,
начиная с 00:00:00 01.01.1970. Если timer не является нулевым указатель, то в объект, на
который указывает timer, помещается возвращаемое значение.
Возврат:
Результат возвращается в секундах. Дата может находиться в интервале с 00:00:00, 01
января 1970 до 19:14:07, 18 января 2038.
Также см.:
Раздел 4.3.2.16, «_gmtoffset»
4.3.2.11. _getenv
Получить значение текущей переменной окружения.
Функция Заголовочный файл
_getenv __replace.h
Заголовок:
size_t _getenv (name,
buf,
bufsize);
const char* name ;
char*
buf ;
size_t
bufsize ;
Описание:
Функция _getenv берет значение текущей переменной окружения. В качестве аргументов
принимает имя переменной окружения name, буфер buf и размер буфера bufsize, в
котором возвращается значение.
Возврат:
Возвращает количество символов, записанных в буфер, 0, если переменная не найдена и 1 в случае ошибки.
4.3.2.12. _terminate
Завершить программу.
Функция Заголовочный файл
41
ЮФКВ.30074-01 33 09
Функция Заголовочный файл
_terminate __replace.h
Заголовок:
void _terminate ();
void;
Описание:
Функция _terminate производит низкоуровневые действия по завершению программы.
4.3.2.13. _putchar
Поместить символ в стандартный поток вывода (stdout).
Функция Заголовочный файл
_putchar __replace.h
Заголовок:
int _putchar (ch);
int ch ;
Описание:
Функция _putchar помещает символ в стандартный поток вывода (stdout).
Возврат:
Возвращаемое значение – 0 в случае ошибки, любое положительное число в случае
успешного выполнения.
Также см.:
Раздел 4.3.2.14, «_getchar»
4.3.2.14. _getchar
Получить символ из файл.
Функция Заголовочный файл
_getchar __replace.h
Заголовок:
int _getchar ();
void;
Описание:
Функция _getchar возвращает символ из файла. Если достигнут конец файла, функция
_getchar возвращает индикатор конца файла.
42
ЮФКВ.30074-01 33 09
Возврат:
Возвращаемое значение – 0 в случае ошибки, любое положительное число в случае
успешного выполнения.
Также см.:
Раздел 4.3.2.13, «_putchar»
4.3.2.15. _fstat
Получить информацию об открытом файле.
Функция Заголовочный файл
_fstat
__replace.h
Заголовок:
int _fstat (handle,
buffer);
_HANDLE handle ;
struct _stat* buffer ;
Описание:
Функция _fstat предоставляет информацию об открытом файле с дескриптором handle.
Информация сохраняется во втором аргументе buffer. Поля структуры _fstat
представлены в главе Раздел 4.3.1.2, «Поля структуры _fstat »
Возврат:
Возвращаемое значение 0, в случае успеха. Возвращенная -1 говорит об ошибке, при
этом errno принимает значение EBADF
4.3.2.16. _gmtoffset
Получить информацию о часовом поясе.
Функция Заголовочный файл
_gmtoffset __replace.h
Заголовок:
time_t _gmtoffset ();
Возврат:
Функция _gmtoffset возвращает смещение времени относительно Гринвича в секундах.
Например, для Москвы смещение равно трем часам. Функция не принимает аргументов.
Также см.:
43
ЮФКВ.30074-01 33 09
Раздел 4.3.2.10, «_time»
4.3.3. Дополнительные функции.
4.3.3.1. _fopen_userbuf
Открывает файл (так же, как и _fopen) без использования динамической памяти.
Спроектирована для использования с отладочными версиями функций работы с динамической
памятью.
Функция Заголовочный файл
_fopen_userbuf stdio.h
Заголовок:
FILE *_fopen_userbuf (fileName,
mode,
buf,
bufsize);
const char * fileName ;
const char * mode ;
const void * buf ;
size_t
bufsize ;
Описание:
Функция _fopen_userbuf, открывает файл подобно функции fopen, но без использования
динамической памяти. Первые два параметра совпадают с параметрами fopen,
следующие параметры - это указатель на пользовательский буфер buf, и его размер
bufsize. Размер буфера должен быть не меньше размера заголовка файла (bufsize >=
sizeof(FILE)).
Возврат:
Аналогичен возврату _fopen(), за исключением того, что если размер буфера bufsize
задан меньше размера заголовка файла sizeof(FILE), то файл не открывается и
возвращается NULL.
Пример:
#include <stdio.h>
#include <stdlib.h>
extern FILE* _debug_malloc_out;
int main ()
{
FILE buf;
_debug_malloc_out = _fopen_userbuf ("debug.out",
"wt",
(const void*)(&buf),
sizeof (FILE));
// небуферизованный вывод
// работа с памятью
_debug_malloc_out = stderr;
44
ЮФКВ.30074-01 33 09
fclose (&buf);
}
Также см.:
Раздел 4.3.2.1, «_open»
4.3.3.2. _sys_info
Получить системную информацию.
Функция Заголовочный файл
_sys_info __replace.h
Заголовок:
size_t _sys_info (operation,
buf,
bufsize);
int
operation ;
void * buf ;
size_t bufsize ;
Описание:
Функция _sys_info позволяет получить системную информацию. operation – числовой
код операции, которую необходимо выполнить, buf – пользовательский буфер, в котором
при вызове функции должны находиться входные значения и в который функция заносит
выходные значения (в зависимости от операции), bufsize – размер буфера.
Таблица 4.4. Режимы работы _sys_info
Значение данных в буфере
Код операции
_SYS_INFO_GET_STACK
На входе в
функцию
Отсутствует
Адрес в
_SYS_INFO_GET_FUNNAME исполняемом
коде
Адрес в
_SYS_INFO_GET_COORDS исполняемом
коде
Возврат:
На выходе из функции
Стек вызовов (массив адресов), начиная
от функции, вызвавшей _sys_info, до
точки входа в программу
Имя функции (неквалифицированное),
содержащей данный адрес
Координаты в исходном коде (строка в
формате имя_файла:номер_строки)
Если размер буфера достаточен для помещения в него выходных данных, функция
возвращает размер реально записанных данных, если нет – необходимый размер буфера
(при этом ничего не записывает в буфер). В случае ошибки (например, buf == NULL при
коде операции, подразумевающем входные данные в буфере) возвращается (size_t)(-1).
45
ЮФКВ.30074-01 33 09
4.3.3.3. _msize
Определить размер блока динамической памяти.
Функция Заголовочный файл
_msize
malloc.h
Заголовок:
size_t _msize (pH);
const void* pH ;
Описание:
Функция _msize возвращает размер блока памяти, выделенной функциями calloc, malloc
или realloc. В качестве аргумента (pH) принимается указатель на блок памяти.
Возврат:
Функция возвращает размер блока памяти в байтах. В случае ошибки (блок памяти не
был выделен или был освобождён) функция возвращает -1.
4.3.3.4. _toupperstr
Преобразовать буквы в заглавные.
Функция Заголовочный файл
_toupperstr ctype.h
Заголовок:
char * _toupperstr (s);
char* s ;
Описание:
Каждая буква строки переводится из строчной в заглавную, если это возможно.
Возврат:
Возвращается строка из заглавных символов.
Также см.:
Раздел 4.3.3.5, «_tolowerstr»
4.3.3.5. _tolowerstr
Преобразовать буквы в строчные.
Функция Заголовочный файл
_tolowerstr ctype.h
Заголовок:
46
ЮФКВ.30074-01 33 09
char * _tolowerstr (s);
char* s ;
Описание:
Каждая буква строки переводится из заглавной в строчную, если это возможно.
Возврат:
Возвращается строка из строчных символов.
Также см.:
Раздел 4.3.3.4, «_toupperstr»
4.3.4. Функции преобразования чисел в строки и наоборот
Функции перевода числа в строку, и обратные им – переводящие строку в число. В
качестве аргумента передается число, буфер и в некоторых случаях основание (2 <= base <= 36).
Обратное преобразование строки в число происходит с помощью стандартных функций
(см. главу 7.20.1.4 стандарта языка С ISO/IEC 9899:1999)
4.3.4.1. _ulltostr, _ultostr, _lltostr и _ltostr
Преобразовать целое число в строку.
Функция Заголовочный файл
_ulltostr stdlib.h
_ultostr stdlib.h
_lltostr
stdlib.h
_ltostr
stdlib.h
Заголовок:
char* _ulltostr (s,
value,
base);
char*
s;
unsigned long long value ;
int
base ;
char* _ultostr (s,
value,
base);
char*
s;
unsigned long value ;
int
base ;
47
ЮФКВ.30074-01 33 09
char* _lltostr (s,
value,
base);
char*
s;
long long value ;
int
base ;
char* _ltostr (s,
value,
base);
char* s ;
long value ;
int
base ;
Описание:
Преобразование целого числа соответствующего типа (value) в строку, помещаемую в
буфер s. После работы функции в s будет последовательность символов (цифр и
латинских букв), представляющая число value в системе счисления base. Аргумент base
должен быть больше или равен 2 и меньше или равен 36.
Возврат:
s. Если base выходит за пределы (от 2 до 36 включительно), то содержимое буфера s не
изменяется. Если передать NULL в качестве первого аргумента, то возвращается NULL.
Также см.:
Раздел 4.3.4.2, «_lltoa, _ltoa и _itoa» Раздел 4.3.4.3, «_dtoa»
4.3.4.2. _lltoa, _ltoa и _itoa
Преобразовать целое число в строку, используя десятичную систему счисления.
Функция Заголовочный файл
_lltoa
stdlib.h
_ltoa
stdlib.h
_itoa
stdlib.h
Заголовок:
char* _lltoa (s,
value);
char*
s;
long long value ;
char* _ltoa (s,
48
ЮФКВ.30074-01 33 09
value);
char* s ;
long value ;
char* _itoa (s,
value);
char* s ;
int
value ;
Описание:
Преобразование целого числа соответствующего типа value в строку, помещаемую в
буфер s. В результате работы функции буфер s будет содержать представление value в
десятичной системе счисления.
Возврат:
s
Также см.:
Раздел 4.3.4.1, «_ulltostr, _ultostr, _lltostr и _ltostr» Раздел 4.3.4.3, «_dtoa»
4.3.4.3. _dtoa
Преобразовать вещественное число в строку.
Функция Заголовочный файл
_dtoa
stdlib.h
Заголовок:
char* _dtoa (s,
value,
precision,
eE);
char*
double
int
char
Описание:
s;
value ;
precision ;
eE ;
Преобразование вещественного числа value в строку, помещаемую в буфер s. precision –
точность (количество знаков после десятичной точки), с которой требуется
преобразовать value. Если precision == 0, то по умолчанию после десятичной точки
остаётся 6 знаков, если precision == -1, то строка будет содержать либо представление
целой части числа (наибольшего целого, не превосходящего данное число), либо (в
научной нотации) мантисса будет состоять из одного знака. Аргумент eE показывает, в
какую нотацию преобразовывать число - в научную (‘e’ или ‘E’), или в обычное
49
ЮФКВ.30074-01 33 09
представление числа, в этом случае необходимо передать 0. Если переданный параметр
отличен от указанных значений, происходят действия по умолчанию, а именно число
преобразуется в научной нотации.
Возврат:
Результатом выполнения функции является число, преобразованное в строку,
помещенную в буфер s.
Пример:
#include <stdio.h>
#include <stdio.h>
#include <stdlib.h>
int main()
{
char buf[20];
double x = 1.23456e+123;
// преобразуем число в строку, оставляя два знака
// после десятичной точки, и выводя его в научной нотации.
_dtoa(buf, x, 2, ‘e’);
printf(“buf = %s\nx
= %.2e\n”, buf, x);
return(0);
}
Результат:
buf = 1.23e+123
x
= 1.23e+123
Также см.:
Раздел 4.3.4.1, «_ulltostr, _ultostr, _lltostr и _ltostr» Раздел 4.3.4.2, «_lltoa, _ltoa и _itoa»
4.3.4.4. _fcvt и _ecvt
Преобразовать вещественное число в строку.
Функция Заголовочный файл
_fcvt
stdlib.h
_ecvt
stdlib.h
Заголовок:
char* _fcvt (value,
precision,
dec,
sign,
buf);
double value ;
int
precision ;
int*
dec ;
50
ЮФКВ.30074-01 33 09
int*
sign ;
char* buf ;
char* _ecvt (value,
precision,
dec,
sign,
buf);
double
int
int*
int*
char*
Описание:
value ;
precision ;
dec ;
sign ;
buf ;
Также преобразуют число с плавающей точкой типа double в строку (_fcvt в обычном
формате, _ecvt - в научной нотации). Существенным отличием от _dtoa является то, что в
буфер buf помещается значение без десятичной точки и знака. Функции принимают
следующие аргументы: value, buf и precision — преобразуемое значение, указатель на
буфер и точность (количество знаков после десятичной точки), они несут тот же смысл,
что и соответствующие аргументы функции _dtoa; по адресам dec и sign записываются
параметры значения: позиция десятичной точки от начала строки (может быть
положительным, нулём или отрицательным) и знак (0 означает '+', любое другое число —
'-') соответственно.
Возврат:
buf
Также см.:
Раздел 4.3.4.3, «_dtoa»
4.3.5. Математические функции
4.3.5.1. _dapproxcmp
Сравнение чисел с плавающей точкой на приближённое равенство.
Функция Заголовочный файл
_dapproxcmp math.h
Заголовок:
int _dapproxcmp (x1,
x0,
epsilon);
51
ЮФКВ.30074-01 33 09
double x1 ;
double x0 ;
double epsilon ;
Описание:
Сравнение двух аргументов (x0 и x1) на равенство, с точностью epsilon, что означает: их
разность по модулю меньше epsilon.
Возврат:
Возвращает 1 в случае успеха (аргументы равны с заданной точностью), в противном
случае возвращает 0.
4.3.5.2. _powExactly
Быстрое возведение в степень.
Функция Заголовочный файл
_powExactly math.h
Заголовок:
double _powExactly (arg1,
arg2);
double arg1 ;
double arg2 ;
Описание:
Быстрое возведение в степень работает аналогично функции стандартной библиотеки
pow(). Отличительными особенностями являются скорость и точность вычисления.
Возврат:
Полностью аналогично возврату функции pow() стандартной библиотеки.
4.3.5.3. _round
Округление числа.
Функция Заголовочный файл
_round
math.h
Заголовок:
double _round (x,
precision);
double x ;
int
precision ;
Описание:
52
ЮФКВ.30074-01 33 09
Округление x до precision знаков после десятичной точки. Округление происходит по
правилам округления.
Возврат:
Возвращает округленное значение числа. В случае ошибки errno присваивается значение
EDOM.
4.3.5.4. hypot
Вычислить гипотенузу.
Функция Заголовочный файл
hypot
math.h
Заголовок:
double hypot (x,
y);
double x ;
double y ;
Описание:
Находит гипотенузу, пологая аргументы x и y катетами прямоугольного треугольника.
Вызов этой функции аналогичен вычислению квадратного корня от суммы квадратов x и
y.
Возврат:
Возвращает длину гипотенузы прямоугольного треугольника.
4.3.6. Функции индикации специальных значений чисел с плавающей точкой
Дополнительные функции для работы с числами. Позволяют определить, является ли
число положительной или отрицательной бесконечностью, не числом. О типах
неопределенностей можно посмотреть в главе Раздел 4.3.1.3, «Константы неопределенностей».
4.3.6.1. _disqnan, _fisqnan
Определить, является ли аргумент не числом.
Функция Заголовочный файл
_disqnan _dconst.h
_fisqnan _fconst.h
Заголовок:
int _disqnan (d);
double d ;
int _fisqnan (f);
53
ЮФКВ.30074-01 33 09
float f ;
Описание:
Проверяет, является ли значение аргумента d (для функции _disqnan) или f (для функции
_fisqnan) quiet NaN. Функции _disqnan и _fsiqnan определяют так называемый quiet NaN
("тихое" не число).
Возврат:
1, если параметр является quiet NaN, 0 в противном случае.
Пример:
см. пример для Раздел 4.3.6.3, «_disinf, _fisinf»
Также см.:
Раздел 4.3.6.3, «_disinf, _fisinf» Раздел 4.3.6.2, «_dissignan, _fissignan» Раздел 4.3.6.4,
«_disspecial, _fisspecial»
4.3.6.2. _dissignan, _fissignan
Определить, является ли аргумент не числом.
Функция Заголовочный файл
_dissignan _dconst.h
_fissignan _fconst.h
Заголовок:
int _dissignan (d);
double d ;
int _fissignan (f);
float f ;
Описание:
Проверяет, является ли значение аргумента d (для функции _dissignan) или f (для
функции _fissignan) signaling NaN. Функции _dissignan и _fissignan определяют так
называемый signaling NaN (сигналящее не число).
Возврат:
1, если параметр является signaling NaN, 0 в противном случае.
Пример:
см. пример для Раздел 4.3.6.3, «_disinf, _fisinf»
Также см.:
54
ЮФКВ.30074-01 33 09
Раздел 4.3.6.3, «_disinf, _fisinf» Раздел 4.3.6.1, «_disqnan, _fisqnan» Раздел 4.3.6.4,
«_disspecial, _fisspecial»
4.3.6.3. _disinf, _fisinf
Определить, является ли аргумент бесконечностью (положительной или отрицательной).
Функция Заголовочный файл
_disinf
_dconst.h
_fisinf
_fconst.h
Заголовок:
int _disinf (d);
double d ;
int _fisinf (f);
float f ;
Описание:
Определяет, является ли d (для функции _disinf) или f (для функции _fisinf)
положительной или отрицательной бесконечностью.
Возврат:
1, если параметр является бесконечностью, 0 в противном случае.
Пример:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
double x = -HUGE_VAL;
// значение HUGE_VAL определено _dposinf.
if(_disinf(x))
{
if(x > 0)
printf(“POSINF\n”);
else
printf(“NEGINF\n”);
} else
printf(“x = %e is not INF\n”);
return(0);
}
Результат:
-HUGE_VAL
Также см.:
Раздел 4.3.6.1, «_disqnan, _fisqnan» Раздел 4.3.6.2, «_dissignan, _fissignan» Раздел 4.3.6.4,
«_disspecial, _fisspecial»
4.3.6.4. _disspecial, _fisspecial
55
ЮФКВ.30074-01 33 09
Определить, является ли аргумент одним из специальных значений.
Функция Заголовочный файл
_disspecial _dconst.h
_fisspecial _fconst.h
Заголовок:
int _disspecial (d);
double d ;
int _fisspecial (f);
float f ;
Описание:
Функции _disspecial и _fisspecial определяют, является ли аргумент одним из
специальных значений : бесконечностью (положительной или отрицательной) или не
числом (NaN) (сигналящим(signaling) или тихим(quiet)).
Возврат:
1, если параметр является специальным значением, 0 в противном случае.
Пример:
см. пример для Раздел 4.3.6.3, «_disinf, _fisinf»
Также см.:
Раздел 4.3.6.3, «_disinf, _fisinf» Раздел 4.3.6.2, «_dissignan, _fissignan» Раздел 4.3.6.1,
«_disqnan, _fisqnan»
56
ЮФКВ.30074-01 33 09
4.4. Особенности реализации локали (местных особенностей)
В библиотеке ЗАО «Интерстрон» (как в C, так и в C++) поддерживается только локаль
“C”, требуемая по стандартам этих языков. Также поддерживается только, так называемый,
основной набор символов (basic character set), то есть символы с ASCII-кодами от 0 до 127 (их
символьное представление также соответствует ASCII). Для широких символов поддерживается
аналогичный набор широких символов.
57
ЮФКВ.30074-01 33 09
ГЛАВА 5. ОПТИМИЗАЦИИ
При генерации
архитектуры.
компилятором
ассемблерного
кода
учитываются
ограничения
58
ЮФКВ.30074-01 33 09
5.1. Оптимизации, не связанные с целевой платформой
Полный глобальный пронос констант (constant propagation). В рамках этой
оптимизации осуществляется не только подготовка более полной подстановки констант в
инструкции в качестве непосредственных аргументов, но и вычисление всех константных
выражений на этапе компиляции, а также оптимизация переходов по условию, являющемуся
константным выражением.
Удаление «мёртвого» кода. Мёртвым называется код, который не влияет на
возвращаемое значение функции и не участвует в формировании её побочных эффектов. Такой
код удаляется. Это может значительно уменьшить размер программы и время её исполнения.
Подстановка функций (function inlining). В случаях, предусмотренных Стандартом
С++, когда это является целесообразным, происходит подстановка функции вместо её вызова .
Удаление недостижимого кода. Код, который никогда не может быть исполнен,
удаляется.
59
ЮФКВ.30074-01 33 09
5.2. Оптимизации, основанные на особенностях платформы NM6304
Глобальное распределение регистров. Если значения в регистрах не пересекаются по
времени жизни, они могут быть помещены в один регистр. Глобальное распределение регистров
значительно уменьшит количество загрузок/сохранений регистров в память (так называемый
spill code). Кроме того, в рамках этой оптимизации будет производиться удаление всех (или
подавляющего большинства) лишних копирований значений между регистрами.
«Планирование» инструкций (instruction scheduling). Компилятор изменяет порядок
инструкций и упаковывает их в параллельные пакеты таким образом, чтобы достигать возможно
большей загрузки конвейера и, соответственно, возможно более быстрого их исполнения.
60
ЮФКВ.30074-01 33 09
ПРИЛОЖЕНИЕ A. НЕРЕАЛИЗОВАННЫЕ СВОЙСТВА
В данной версии не реализованы следующие свойства C и C++:
1. Не поддерживается разновидность явной специализации шаблонных классов и функций,
описанная в пункте 14.7.3#18 Стандарта, когда один или несколько объемлющих
шаблонных классов остаются неспециализированными. Пример:
2.
template<class T> struct A
3.
{
4.
template<class U> struct B
5.
{
6.
static int m;
7.
};
8.
};
9.
template<> template<class U> static int A<int>::B<U>::m = 1;
Заметим, что это свойство не поддерживается ни одним их известных нам компиляторов.
10. Не поддерживается экспорт шаблонов. Из известных компиляторов экспорт шаблонов
поддерживает только компилятор EDG..
61
ЮФКВ.30074-01 33 09
ПРИЛОЖЕНИЕ B. ДИАГНОСТИЧЕСКИЕ СООБЩЕНИЯ
КОМПИЛЯТОРА
FEC00001 FATAL
Невозможно открыть исходный файл '%s'
Source file '%s' cannot be opened
Компилятор не может найти или открыть указанный исходный файл. Убедитесь, что имя
исходного файла указано верно. Убедитесь, что файл может быть прочитан и его содержимое не
разрушено. Если файл расположен на сетевом диске, убедитесь в нормальном
функционировании сети. Также файл может быть заблокирован другой программой или у вас
недостаточно прав доступа к файлу.
The compiler could not open the specified source file. Ensure the source file name is correct. Ensure
that the correct file is being read and has not been corrupted. If the file is located on a LAN drive,
ensure the LAN is working properly. Also, the file may be locked by another process or access may be
denied because of insufficient permission.
FEC00002 FATAL
Внутренняя ошибка компилятора: %s в %s[%u]: %s
Internal compiler error: %s at %s[%u]: %s
Во время компиляции была обнаружена внутренняя ошибка компилятора.
An internal compiler error occurred during compilation.
FEC00003 FATAL
Невозможно прочитать исходный файл '%s'
Unable to read source file '%s'
Возникла ошибка при чтении исходного файла. Убедитесь, что файл может быть прочитан и его
содержимое не разрушено. Если файл расположен на сетевом диске, убедитесь в нормальном
функционировании сети. Также файл может быть заблокирован другой программой или у вас
недостаточно прав доступа к файлу.
An read error occurred during compilation. Ensure that the source file is being read and has not been
corrupted. If the file is located on a LAN drive, ensure the LAN is working properly. Also, the file may
be locked by another process or access may be denied because of insufficient permission.
FEC00004 ERROR
Неожиданный конец исходного файла
Unexpected end of the source file
62
ЮФКВ.30074-01 33 09
Во время компиляции исходного файла возникла синтаксическая ошибка, в результате которой
компилятор обнаружил конец файла раньше, чем смог закончить разбор исходного файла.
Исправьте синтаксическую ошибку.
void f(void* p)
{
delete [ p;
}
FEC00005 ERROR
%s
%s
Это сообщение было сгенерировано с помощью директивы #error или #warning,
предназначенными для вывода определяемых пользователем сообщений, помещаемых в
исходный текст.
This message has been generated by the #error or #warning preprocessor directive, which is a userdefined error message placed in the source code.
FEC00006 ERROR
Функция 'main' не может быть перегружена
Function 'main' cannot be overloaded
Программа должна содержать глобальную функцию называемую main, которая представляет
собой начало программы. Эта функция не может быть перегружена. ISO/IEC 14882 (3.6.1)
A program shall contain a global function called main, which is the designated start of the program.
This function shall not be overloaded. ISO/IEC 14882 (3.6.1)
FEC00007 ERROR
Строковый литерал должен быть завершен до конца строки
The string must be terminated before the end of the line
Компилятор обнаружил строковый литерал, который не был завершен до окончания строки.
Завершите строковый литерал до перехода на новую строку исходного текста или используйте
"\" для продолжения литерала на следующей строке. Символ "\" должен быть последним
символом в строке.
The compiler detected a string that was not terminated before an end of line. End the string before the
end of the line, or use "\" to continue the string on the next line. The "\" must be the last character on
the line.
const char* str = "string
63
ЮФКВ.30074-01 33 09
string";
FEC00008 FATAL
Недостаточно памяти для инстанцирования шаблона
Not enough memory for template instantiating
Компилятор исчерпал доступную ему память во время инстанцирования шаблона. Завершите
все ресурсоемкие процессы, увеличьте размер файла подкачки, отключите оптимизацию.
Попробуйте также разделить исходный файл на несколько небольших секций или сократить
определение шаблона.
The compiler ran out of memory trying to instantiate the template. Shut down any large processes that
are running, ensure your swap path is large enough, turn off optimization, or limit the optimizer's
working set maximum. You can also divide the file into several small sections or shorten the template.
FEC00009 FATAL
Невозможно продолжить компиляцию после предыдущих ошибок
Unable to compile after previous errors
Во время компиляции исходного файла возникла синтаксическая ошибка, после которой
компилятор не смог продолжить разбор исходного файла. Исправьте синтаксическую ошибку.
FEC00010 ERROR
Недопустимый формат литерала с плавающей точкой
Floating point constant is not valid
Обратитесь к руководству по языкам C и C++ за описанием формата литерала с плавающей
точкой. Убедитесь, что литерал с плавающей точкой не содержит недопустимых символов.
See the C and C++ language reference for a description of a floating-point constant. Ensure that the
floating-point constant does not contain any characters that are not valid.
float f = 1e 10;
FEC00011 ERROR
Недопустимый формат восьмеричного или шестнадцатеричного литерала
Octal or hexadecimal integer constant is not valid
В записи восьмеричного числа допускаются только цифры от 0 до 7. Убедитесь, что
восьмеричный литерал не содержит недопустимых символов.
The octal integer constant contains an '8' or a '9'. Octal numbers include 0 through 7. Ensure that the
octal integer constant is valid.
64
ЮФКВ.30074-01 33 09
int o = 0099;
FEC00012 ERROR
Невозможно инициализировать внешнюю переменную при ее объявлении
Initializer is not allowed for external variable declaration
Не допускается инициализация внешней переменной при ее объявлении. Инициализируйте
переменную в том месте, где производится ее определение.
extern int i = 5;
FEC00013 ERROR
Идентификатор содержит недопустимый символ '%c'
Identifier contains a '%c' character
Символ '%c' не может использоваться в идентификаторе. Идентификатор может содержать
цифры и буквы латинского алфавита и символ подчеркивания. Идентификатор должен
начинаться с буквы латинского алфавита или символа подчеркивания.
You cannot use the '%c' character in an identifier. An identifier can contain alphanumeric characters
and underscores. An identifier must start with either an underscore or alphabetic character.
int `a = 5;
FEC00017 ERROR
Превышен предельный уровень вложенности блоков
Maximum blocks nesting depth has been exceeded
Слишком большая вложенность блоков. Уменьшите вложенность блоков.
The block statements have been nested too deeply. Reduce the number of nested blocks.
FEC00018 ERROR
Оператор '__leave' должен находится внутри блока '__try'
Statement '__leave' must be within a '__try' block
FEC00019 ERROR
Необъявленный идентификатор '%s'
Identifier '%s' is undefined
65
ЮФКВ.30074-01 33 09
Указанный идентификатор использован, но не объявлен. Объявите идентификатор до его
использования, проверьте правильность его написания и видимость при использовании. Если
идентификатор объявлен в заголовочном файле, убедитесь, что все требуемые макросы
определены перед включением этого файла.
The specified identifier is used but has not been defined. Define the identifier before using it. Check its
spelling. If the identifier has been defined in a header file, check that any required macros have been
defined.
void f()
{
i = 5;
}
FEC00020 ERROR
Повторное объявление '%s' в '%s'
Multiple definition of '%s' in '%s'
Попытка объявить имя, которое уже было объявлено ранее. Измените одно из имен или уберите
одно из объявлений. Проверьте правильность написания и область видимости обоих имен.
ISO/IEC 14882 (3.2)
An attempt is being made to define a name that has already been defined. Change one of the names or
remove one of the definitions. Check the spelling and the scope of the two variables. ISO/IEC 14882
(3.2)
int a;
float a;
FEC00021 ERROR
Необъявленный базовый класс '%s'
Base class '%s' is undeclared
Не объявленный ранее класс используется в качестве базового класса. Базовым классом должен
быть только полностью определенный ранее класс. Определите класс до его использования,
проверьте правильность написания имени и видимость его при использовании. Если базовый
класс определен в заголовочном файле, убедитесь, что все требуемые макросы определены
перед включением этого файла. ISO/IEC 14882 (10)
class A : public X {};
FEC00022 ERROR
Неопределенный базовый класс '%s'
Base class '%s' is undefined
66
ЮФКВ.30074-01 33 09
В качестве базового класса используется ранее объявленный, но не определенный полностью
класс. Базовым классом должен быть только полностью определенный ранее класс. Определите
класс до его использования, проверьте правильность написания имени и видимость его при
использовании. Если базовый класс определен в заголовочном файле, убедитесь, что все
требуемые макросы определены перед включением этого файла. ISO/IEC 14882 (10)
class X;
class A : public X {};
FEC00023 ERROR
Класс '%s' указан в списке базовых классов более одного раза
Class '%s' has been used more than once in the same base class list
Базовый класс может быть указан только один раз в списке базовых классов производного
класса. Удалите одно из указаний.
A base class may only be specified once in the base class list for a derived class. Remove one of the
specifications.
class A {};
class B : public A, protected A {};
FEC00024 ERROR
Операторы SEH не поддерживаются
SEH statements is not supported
FEC00025 ERROR
Неоднозначное обращение к члену '%s'
Ambiguous reference to member '%s'
Обнаружено обращение к члену производного класса, который объявлен несколько раз в разных
базовых классах. Компилятор не может определить, какой из базовых классов нужно
использовать. Измените одно из имен или всегда полностью квалифицируйте это имя.
The derived class made a reference to a member that is declared in more than one of its base classes
and the compiler cannot determine which base class member to choose. Change one of the names, or
always fully qualify the name.
class A { int a; };
class B { int a; };
class C: public A, public B {};
void f (C *cp)
{
67
ЮФКВ.30074-01 33 09
cp->a = 5;
}
FEC00026 ERROR
Повторное объявление '%s'
Multiple definition of '%s'
Попытка объявить класс или объединение, которое уже было объявлено ранее. Измените одно
из имен или уберите одно из объявлений. Проверьте правильность написания и область
видимости обоих имен. ISO/IEC 14882 (3.2)
An attempt is being made to define a class or union that has already been defined. Change one of the
names or remove one of the definitions. Check the spelling and the scope of the two names. ISO/IEC
14882 (3.2)
class A {};
class A {};
FEC00027 ERROR
Неизвестный член '%s'
Unknown member '%s'
Данное собщение является следствием ошибок, обнаруженных в объявлении класса. Устраните
ошибки в объявлении класса.
FEC00028 ERROR
Синтаксическая ошибка в деструкторе класса
Syntax error in class destructor
Во время компиляции исходного файла обнаружена синтаксическая ошибка в объявлении или
при обращении к деструктору класса. Исправьте синтаксическую ошибку.
class A
{
~A();
};
void f( A* p )
{
p->~;
}
FEC00029 ERROR
Оператор 'continue' должен быть внутри оператора 'for', 'while' или 'do'
68
ЮФКВ.30074-01 33 09
Statement 'continue' must be within a 'for', 'while', or 'do' statement
Оператор continue обнаружен за пределами допустимой области действия этого оператора.
Оператор continue должен использоваться только внутри или как тело цикла оператора for,
while или do. Переместите оператор в допустимую область действия или удалите его. ISO/IEC
14882 (6.6.2)
The continue statement was found outside the valid scope for such a statement. A continue statement
shall appear only in or as a loop body of a for, while, or do statement. Place the statement in the correct
scope or remove it. ISO/IEC 14882 (6.6.2)
void f(int a)
{
if(a) continue;
}
FEC00030 ERROR
Оператор 'break' должен быть внутри оператора 'for', 'while', 'do' или 'switch'
Statement 'break' must be within a 'for', 'while', 'do', or 'switch' statement
Оператор break обнаружен за пределами допустимой области действия этого оператора.
Оператор break должен использоваться только внутри или как тело оператора for, while, do или
switch. Переместите оператор в допустимую область действия или удалите его. ISO/IEC 14882
(6.6.1)
The break statement was found outside the valid scope for such a statement. A break statement shall
appear only in or as a loop body of a for, while, or do statement or in or as a switch body of a switch
statement. Place the statement in the correct scope or remove it. ISO/IEC 14882 (6.6.1)
void f(int a)
{
if(a) break;
}
FEC00031 ERROR
Метка 'case' должна быть внутри оператора 'switch'
Label 'case' must be within a 'switch' statement
Метка case обнаружена за пределами допустимой области действия этой метки. Метка case
должна использоваться только внутри тела оператора switch. Переместите метку в допустимую
область действия или удалите ее. ISO/IEC 14882 (6.4.2)
The case label was found outside the valid scope for such a label. A case label shall appear only in a
switch body of a switch statement. Place the label in the correct scope or remove it. ISO/IEC 14882
(6.4.2)
69
ЮФКВ.30074-01 33 09
void f()
{
case 1:
return;
}
FEC00032 ERROR
Метка 'default' должна быть внутри оператора 'switch'
Label 'default' must be within a 'switch' statement
Метка default обнаружена за пределами допустимой области действия этой метки. Метка
default должна использоваться только внутри тела оператора switch. Переместите метку в
допустимую область действия или удалите ее. ISO/IEC 14882 (6.4.2)
The default label was found outside the valid scope for such a label. A default label shall appear only
in a switch body of a switch statement. Place the label in the correct scope or remove it. ISO/IEC
14882 (6.4.2)
void f()
{
default:
return;
}
FEC00033 ERROR
Повторное определение метки 'default' в операторе 'switch'
Duplicate 'default' label in 'switch' statement
Допускается определение единственной метки default в операторе switch. Обнаруженная метка
default не является первой. Если используются вложенные операторы switch, проверьте
соответствие скобок. Удалите одну из меток default. ISO/IEC 14882 (6.4.2)
Only one default label is allowed in a switch statement. This default label is not the first in the switch
statement. If you have nested switch statements, check that the braces match correctly. If they do not
match, remove one of the default labels. ISO/IEC 14882 (6.4.2)
int f(int i)
{
switch(i)
{
case 1:
return 1;
default:
return 0;
default:
70
ЮФКВ.30074-01 33 09
return 5;
}
}
FEC00036 ERROR
Совпадающее значение метки 'case %s': предыдущая метка 'case' с тем же значением
находится в (%s:%ld)
Duplicate 'case %s' value: another 'case' with the same value is at (%s:%ld)
Значение метки case должно быть уникальным внутри каждого оператора switch. Если
используются вложенные операторы switch, проверьте соответствие скобок. Измените или
удалите одно из значений метки case.
Case values must be unique within each switch statement. Change or remove one of the duplicate case
values. Check the braces if you have nested switch statements.
int f(int i)
{
switch(i)
{
case 1:
return -1;
case 2:
return -2;
case 1:
return -1;
}
}
FEC00037 WARNING
Результат вычисления выражения не используется
Expression result is not used
Выражение не имеет никаких побочных эффектов и результат вычислений нигде не
используется. Удалите выражение, или используйте его результат.
The expression has no side effects and produces a result that is not used. Remove the expression or use
its result.
void f(int a, int b)
{
a + b;
}
FEC00038 WARNING
71
ЮФКВ.30074-01 33 09
Недостижимая инструкция
The statement is unreachable
Данная инструкция никогда не получит управления во время выполнения программы.
Обеспечьте получение управления инструкцией или удалите ее.
The flow of control in the program never allows the statement to be be reached. Ensure that the
statement is accessible to the flow of control, or remove the statement.
int f( int a, int b )
{
return a + b;
a += b;
}
FEC00039 ERROR
Синтаксическая ошибка в или после квалификации
Syntax error in or after qualification
Во время компиляции исходного файла обнаружена синтаксическая ошибка в инструкции
квалификации элемента. Исправьте синтаксическую ошибку.
class A { public: static int a; };
int f()
{
return A:::a;
}
FEC00040 ERROR
Повторное объявление перечисления '%s'
Multiple definition of enumeration type '%s'
Попытка объявить перечисление с именем, которое уже было объявлено ранее. Измените одно
из имен или уберите одно из объявлений. Проверьте правильность написания и область
видимости обоих имен. ISO/IEC 14882 (3.2)
An attempt is being made to define a enumeration with name that has already been defined. Change
one of the names or remove one of the definitions. Check the spelling and the scope of the two names.
ISO/IEC 14882 (3.2)
enum E { a, b, c };
enum E { a, b, c };
FEC00042 ERROR
72
ЮФКВ.30074-01 33 09
Повторное определение метки '%s'
Duplicate definition of label '%s'
Указанная метка уже определена в текущей функции. Допускается только одно определение для
любой метки внутри тела функции. Переименуйте или удалите одну из меток.
The specified label has already been defined in the current function. A label can only be declared once
within a function. Remove or rename one of the label definitions.
int f()
{
goto label;
label:
return 1;
{
label:
return 2;
}
}
FEC00043 ERROR
Использование '%s' в качестве базового класса невозможно
'%s' cannot be used as a base class
Только класс может быть использован в качестве базового при объявлении другого класса.
Укажите имя класса в качестве базового класса. Проверьте его написание.
Only class can be used as base classes for other class declarations. Specify a class name. Check the
spelling.
typedef int A;
class B : public A {};
FEC00044 WARNING
Десятичное значение '%s' выходит за допустимые пределы
The decimal constant '%s' is out of range
Обнаружена десятичная константа, чье значение выходит за допустимые пределы и не может
быть обработано компилятором. Проверьте допустимые пределы, определенные в файле
limits.h. Убедитесь, что значение константы находится в этих пределах.
You have provided an decimal constant that is out of range. For the range of integer constants check
limits.h. Ensure the decimal constant is in range.
73
ЮФКВ.30074-01 33 09
int i = 100000000000000000000;
FEC00046 ERROR
Стиль Си - '%s' не может быть преобразован в '%s'
C style - '%s' cannot be converted to '%s'
В соответствии со стандартом ISO/IEC 14882 "Языки программирования - С++", присваивание
переменной перечисляемого типа целочисленного значения является недопустимым. Однако,
ранние версии этого стандарта и стандарт ISO/IEC 9899 "Языки программирования - C"
допускали такое присваивание. Используйте опцию компилятора -Xo для включения
совместимости с языком C. В этом случае данное сообщение будет выдаваться в виде
предупреждения. ISO/IEC 14882 (3.2) ISO/IEC 9899 (6.7.2.2)
ISO/IEC 14882 (3.2) ISO/IEC 9899 (6.7.2.2)
enum E { e };
void f()
{
E ee;
ee = 5;
}
FEC00047 ERROR
Стиль Си - '%s' не может быть инициализирован '%s'
C style - '%s' cannot be inizialized by '%s'
В соответствии со стандартом ISO/IEC 14882 "Языки программирования - С++", инициализация
переменной перечисляемого типа целочисленным значением является недопустимым. Однако,
ранние версии этого стандарта и стандарт ISO/IEC 9899 "Языки программирования - C"
допускали такую инициализацию. Используйте опцию компилятора -Xo для включения
совместимости с языком C. В этом случае данное сообщение будет выдаваться в виде
предупреждения. ISO/IEC 14882 (3.2) ISO/IEC 9899 (6.7.2.2)
ISO/IEC 14882 (3.2) ISO/IEC 9899 (6.7.2.2)
enum E { e };
E ee = 5;
FEC00048 ERROR
'%s' имеет имя совпадающее с содержащим его классом
'%s' has the same name as its containing class
Компилятор обнаружил неверное имя в определении класса. Вложенные типы и члены класса
должны иметь имена, отличные от имени содержащего их класса. Измените одно из имен.
ISO/IEC 14882 (9.2)
74
ЮФКВ.30074-01 33 09
The compiler has detected conflicting names for objects within a class declaration. Nested types and
class members declarations must have different names. Change the name of the conflicting objects.
ISO/IEC 14882 (9.2)
class A
{
int A;
};
FEC00049 ERROR
'%s' не является именем типа
'%s' is not a type name
Компилятор обнаружил имя, не являющееся типом, там, где требуется использование имени
типа. При объявлении объекта обязательно требуется указание его типа. Проверьте
правильность написания и область видимости имени. Измените его на имя типа или удалите
инструкцию.
The compiler detected a non-type symbol where a type is required. A type must be used to declare an
object. Change to a type name or remove the expression.
typedef X x;
FEC00050 ERROR
Повторное использование спецификатора '%s'
Duplicate specifier '%s'
Один и тот же спецификатор используется дважды в одном объявлениии. В повторном
использовании спецификатора нет необходимости, удалите один из повторяющихся
спецификаторов.
static static int i;
FEC00051 ERROR
Спецификатор '%s' недопустим после предыдущих спецификаторов
Specifier '%s' is not allowed after previous specifiers
В одном объявлении используются два несовместимых между собой спецификатора.
Определите, какой из спецификаторов необходим, и удалите лишний.
extern static int i;
FEC00053 ERROR
Функция вложена в другую функцию
75
ЮФКВ.30074-01 33 09
Function is nested within another function
Нельзя использовать функции, вложенные в другие функции. Убедитесь, что не пропущен
разделитель "}" перед началом определения новой функции. Удалите вложенную функцию.
You cannot nest functions in C++. Ensure that a "}" s not missing before the start of the function.
Remove the nested function.
void f()
{
int g()
{
return 5;
}
}
FEC00054 ERROR
Функция не может быть элементом массива
Function is not allowed as an array element type
Язык C++ не допускает объявление массива функций. Удалите объявление или замените ее на
объявление массива указателей на функции.
The C++ language does not allow the declaration of an array of functions. Remove the declaration or
change the declaration so that it is an array of pointer to functions.
void f[10]();
FEC00056 ERROR
Невозможно объявить указатель на ссылку
Pointers to references are not allowed
Невозможно объявить или определить тип, являющийся указателем на ссылку. Замените данный
тип на тип указателя на указатель или удалите объявление. ISO/IEC 14882 (8.3.2)
ISO/IEC 14882 (8.3.2)
int&* p;
FEC00057 ERROR
Невозможно объявить ссылку на ссылку
References to references are not allowed
Невозможно объявить или определить тип, являющийся ссылкой на ссылку. Замените данный
тип на тип указателя на указатель или удалите объявление. ISO/IEC 14882 (8.3.2)
76
ЮФКВ.30074-01 33 09
ISO/IEC 14882 (8.3.2)
int& & r;
FEC00059 ERROR
Недостаточно памяти для определения типа
Not enough memory for type definition
Компилятор исчерпал доступную ему память во время определения нового типа. Завершите все
ресурсоемкие процессы, увеличьте размер файла подкачки, отключите оптимизацию.
Попробуйте также разделить исходный файл на несколько небольших секций.
The compiler ran out of memory trying to define the type. Shut down any large processes that are
running, ensure your swap path is large enough, turn off optimization, or limit the optimizer's working
set maximum. You can also divide the file into several small sections.
FEC00060 ERROR
Функция не может возвращать функцию
Function cannot return a function
Невозможно объявить функцию возвращающую функцию. Измените объявление таким
образом, чтобы возвращаемый тип был типом указателя на функцию.
You cannot declare a function with a function as its return type. Declare the function to return a pointer
to the function.
typedef int F(int);
F g();
FEC00061 ERROR
Спецификаторы 'static' и 'extern' недопустимы в объявлении типа
Specifiers 'static' and 'extern' are not allowed in type definition
Спецификатор static или extern использован в объявлении типа. Спецификатор static может
быть применен только к имени объекта, функции и анонимного объединения. Спецификатор
extern может быть применен только к имени объекта и функции. Удалите спецификатор.
ISO/IEC 14882 (7.1.1)
Storage class specifier static or extern was used in type definition. The static specifier can be applied
only to names of objects and functions and to anonymous unions. The extern specifier can be applied
only to the names of objects and functions. Remove the storage class specifier. ISO/IEC 14882 (7.1.1)
static class C {};
extern enum E {};
77
ЮФКВ.30074-01 33 09
FEC00062 ERROR
Объявление должно содержать идентификатор
Declaration must declare at least one identifier
Единственным компонентом данного объявления является его спецификатор. Отстутсвует
идентификатор, который должен быть объявлен. Укажите, по крайней мере, один
идентификатор.
The declaration specifier was the only component of the declaration. This declaration doesn't declare
anything. Specify at least one identifier.
int;
struct {};
FEC00063 ERROR
Глобальное анонимное объединение должно быть объявлено как 'static'
Global anonymous union must be declared 'static'
Анонимное объединение, определяемое в именованом или глобальном пространстве имен,
должно быть объявлено как static. Добавьте в объявление спецификатор static или укажите имя
для объединения. ISO/IEC 14882 (9.5)
Anonymous unions declared in a named namespace or in the global namespace shall be declared static.
Specify static or name for union. ISO/IEC 14882 (9.5)
union {
int a;
float b;
};
FEC00064 ERROR
Функция не может быть объявлена как 'auto' или 'register'
Function must not be declared as 'auto' or 'register'
При объявлении или определении функции указан недопустимый спецификатор хранения.
Спецификаторы auto или register могут применяться только к именам объектов, объявленым в
блоке или к параметрам функции. Удалите или измените спецификатор хранения. ISO/IEC
14882 (7.1.1)
The function has a storage class that is not allowed in the context that the function is declared in. The
auto or register specifiers can be applied only to names of objects declared in a block or to function
parameters. Remove the declaration or change the storage class of the function. ISO/IEC 14882 (7.1.1)
auto int f();
78
ЮФКВ.30074-01 33 09
FEC00065 ERROR
Функция не может быть объявлена как 'static' внутри блока
Function must not be declared 'static' at block scope
Функция, объявленная внутри блока, не может иметь класс хранения static. Переместите
объявление функции за пределы блока.
There can be no static function declarations at block scope. Move the function so that it is not defined
at block scope.
void f()
{
static void g();
}
FEC00066 ERROR
Нестатический член класса '%s' используется вне функции-члена
Non-static class member '%s' used outside member function
Обычные (нестатические) члены класса доступны либо посредством селекторов вида c.m или p>m, либо непосредственно по своим (неквалифицированным) именам. Последнее допускается
только внутри нестатических функций-членов этих классов. 9.2 #9 На нестатическое данноечлен или на функцию-член класса можно ссылаться только посредством синтаксиса доступа к
члену класса (5.2.5), за исключением случаев, когда данное или функция используются для
формирования указателя на член класса (5.3.1), когда они используются в теле нестатической
функции-члена этого класса или класса, производного от данного класса (12.6.2), или когда они
используются в mem-инициализаторе конструктора их класса или класса, производного от их
класса (12.6.2).
class C {
const int i;
static const int i1 = 1;
static const int s2 = i; // ошибка
static const int s3 = i1; // правильно
public:
C() : i(2) { };
};
FEC00067 ERROR
Невозможно инициализировать функцию
An initializer is not allowed for function
79
ЮФКВ.30074-01 33 09
Компилятор обнаружил инициализатор в объявлении или определении функции. Удалите
инициализатор.
The compiler detected an initializer where one is not permitted. Remove the initializer.
int f() = 1;
int g() (1);
FEC00068 ERROR
Спецификаторы 'static' и 'extern' недопустимы в объявлении аргументов
Specifiers 'static' and 'extern' are not allowed in argument declaration
Спецификатор static может быть применен только к имени объекта, функции и анонимного
объединения. Спецификатор extern может быть применен только к имени объекта или функции.
Не может быть никаких статических или внешних аргументов функции. Удалите спецификатор.
ISO/IEC 14882 (7.1.1)
The static specifier can be applied only to names of objects and functions and to anonymous unions.
The extern specifier can be applied only to the names of objects and functions. There can be no any
static or extern function parameters. Remove the storage class specifier. ISO/IEC 14882 (7.1.1)
void f( static int p );
void g( extern char* p );
FEC00069 ERROR
Использование 'typedef' недопустимо в объявлении аргументов
'typedef' is not allowed in argument declaration
Компилятор обнаружил использование оператора typedef в объявлении аргумента функции.
Подобное использование typedef является недопустимым. Удалите оператор.
void f( typedef int p );
FEC00070 ERROR
Спецификаторы 'friend', 'inline' или 'virtual' недопустимы вне объявления функции
Specifiers 'friend', 'inline', and 'virtual' are not allowed in non-function declaration
Спецификаторы friend, inline и virtual могут быть использованы только в объявлении функции.
Удалите спецификатор функции. ISO/IEC 14882 (7.1.2)
Specifiers friend, inline, and virtual can be used only in function declarations. Remove the function
specifier. ISO/IEC 14882 (7.1.2)
class C
80
ЮФКВ.30074-01 33 09
{
inline int i;
virtual int v;
friend int f;
};
FEC00071 ERROR
Спецификатор 'friend' должен использоваться только в определении класса
Specifiers 'friend' must be within a class definition
Спецификатор friend может быть указан только при определении класса. Удалите
спецификатор. ISO/IEC 14882 (11.4)
ISO/IEC 14882 (11.4)
friend void f();
FEC00072 ERROR
Спецификаторы 'const' и 'volatile' недопустимы для функции не члена класса
Specifiers 'const' and 'volatile' are not allowed for non-member function
Спецификаторы const и volatile имеют смысл только при применении к функции члену класса,
так как эти спецификаторы применяются к указателю this. Удалите спецификатор из объявления
функции. ISO/IEC 14882 (7.1.5.1)
const and volatile are only significant for non-static class member functions, since they are applied to
the this pointer. Remove const and volatile from all non-member functions. ISO/IEC 14882 (7.1.5.1)
void f() const;
void f() volatile;
FEC00073 ERROR
Спецификатор 'extern' недопустим для члена класса
Specifier 'extern' is not allowed for class member
Спецификатор extern может быть применен только к имени объекта или функции.
Спецификатор extern не может быть использован в объявлении членов класса. Удалите
спецификатор. ISO/IEC 14882 (7.1.1)
The extern specifier can be applied only to the names of objects and functions. The extern specifier
cannot be used in the declaration of class members. Remove the storage class specifier. ISO/IEC 14882
(7.1.1)
class C
{
81
ЮФКВ.30074-01 33 09
extern int i;
};
FEC00074 ERROR
Неверное использование квалифицированного имени '%s'
Illegal use of qualified name '%s'
Компилятор встретил квалифицированное имя в операторе enum, которое не является именем
перечисляемого типа.
class C
{
class E;
};
enum C::E;
FEC00075 ERROR
Невозможно определить общий тип для указателей различных типов: '%s' и '%s'
Cannot determine composite type for pointers of different types: '%s' and '%s'
FEC00076 ERROR
Нельзя повторно объявить локальный класс %s как 'friend'
Cannot redeclare local class %s as 'friend'
FEC00077 ERROR
Член класса '%s' объявлен вне тела класса
Class member '%s' is declared outside its class body
Вне объявления класса нельзя объявлять член класса, в этом нет необходимости. Вне тела
класса может появлятся только описание члена класса.
class A
{
void f();
};
void A::f();
FEC00078 ERROR
Константная переменная '%s' должна быть инициализирована
Constant variable '%s' must be initialized
82
ЮФКВ.30074-01 33 09
Константа должна быть проинициализирована значением при создании, так как изменять
значение констант после создания нельзя. Добавьте инициализирующее выражение для
константы.
const int ci;
FEC00079 ERROR
Нельзя объявить объект типа 'void'
Cannot declare object of type 'void'
Тип 'void' может использоватся только как составной тип или как тип возвращаемого значения
из функции. Поэтому объект типа 'void' существовать не может.
void v;
FEC00080 ERROR
Тип возврата для функции 'main' изменен на целый тип
Return type for 'main' changed to integer type
Функция 'main' должна возвращать целый тип, можно явно не указывать возвращаемое значение
из функции 'main' в этом случае система получит код успешного завершения программы.
void main() {}
FEC00081 ERROR
Функция 'main' не может задаваться со спецификатором 'static' или 'inline'
'main' cannot be 'static' or 'inline'
Функция 'main' является точкой входа в пргорамму и должна иметь внешнее связывание, а
функции со спецификатороми 'static' или 'inline' имеют внутренне связывание. Удалите
спецификатор.
static int main()
{
return 0;
}
FEC00082 ERROR
Функция 'main' допускается в одном из следующих видов 'main()' или 'main(int, char**)'
For 'main' function only signatures main() or main(int, char**) are allowed
Функция 'main' допускается только, в одном из двух типов, все остальные типы запрещаются.
Измените прототип функции 'main' на один из двух.
83
ЮФКВ.30074-01 33 09
int main(int)
{
return 0;
}
FEC00083 ERROR
Первый параметр функции 'main' должен иметь тип 'int'
The first parameter for function 'main' must have type 'int'
В первом параметре функции 'main' передается количество аргументов при запуске программы,
и он должен иметь тип 'int'. Измените тип первого аргумента функции 'main' на 'int'.
int main(unsigned argc, char** argv)
{
return 0;
}
FEC00084 ERROR
Второй параметр функции 'main' должен иметь тип 'char**'
The second parameter for function 'main' must have type 'char**'
Во втором параметре функции 'main' передается указатель на массив строк, переданных
функции 'main' в качестве параметров, количество параметров передается в первом аргументе.
Измените тип второго аргумента функции 'main' на 'char**'.
int main(int argc, char* argv)
{
return 0;
}
FEC00085 ERROR
Невозможно открыть файл '%s' для промежуточного представления
Cannot open file '%s' for intermediate representation
FEC00086 ERROR
Переменная '%s' инициализирована дважды
Variable '%s' is initialized twice
FEC00087 ERROR
Функция '%s' описана дважды; первое описание находится в строке %d
Function '%s' is defined twice; the first definition is at line %d
84
ЮФКВ.30074-01 33 09
Функция может быть объявлена много раз, но описана только один раз. Одна и та же функция
со спецификатором 'inline' может быть описана в нескольких единицах трансляции, но каждой
единице трансляции тоже только один раз.
void f() { }
void f() { }
FEC00088 ERROR
Неверный декларатор функции '%s'
Incorrect function declarator '%s'
Неверный синтаксис объявления функции: отсутствуют параметры функции. Даже если
функция не принимает аргументов, то необходимо использовать пустые скобки '()'.
int f
{
return 0;
}
FEC00089 ERROR
Лишняя запятая
Unnecessary comma
FEC00090 ERROR
Спецификатор 'friend' для полного объявления класса %s
'friend' specifier for full class %s declaration
Спецификатор 'friend' может быть использован только для не полного объявления класса.
Использование спецификатора 'friend' с полным объявлением класса недопустимо. Сделайте
полное описание класса без спецификатора 'friend', а потом неполное со спецификатором 'friend'.
class A {
friend class B {};
};
FEC00091 ERROR
Параметр 'this' используется вне функции-члена
'this' outside member function
Указатель 'this' получают только нестатические функции члены. Функции нечлены классов и
статические функции члены классов не получают указатель 'this', поэтому он может быть
использован только внутри нестатических функций членов класса.
85
ЮФКВ.30074-01 33 09
class A;
A* f()
{
return this;
}
FEC00092 ERROR
(internal) переполнение 64-разрядного арифметического
Internal 64-bit arithmetic overflow
Внутри компилятора все вычисления целочисленных константных выражений производятся с
использования 64-разрядной арифметики. Выражение в программе вызвало переполнение этой
64-разрядной арифметики. Упростите выражение.
const int i = 0xFFFFFFFF * 0xFFFFFFFF / 0xFFFFFFFF;
FEC00095 ERROR
(III pass only) implicit conversion integer (%s) to character
(III pass only) implicit conversion integer (%s) to character
FEC00100 ERROR
Слишком много инициализаторов для '%s'
Too many initializers for '%s'
Попытка инициализировать указатель на член класса агрегатным инициализатором который
содержит более одного элемента, что не допустимо. Агрегатные инициализаторы рекомендуется
использовать только для инициализации массивов и POD структур.
struct A
{
int a;
};
int A::*p = { 0, 0 };
FEC00101 ERROR
FEC00102 ERROR
Квалифицированное имя недопустимо
Qualified name is not allowed
86
ЮФКВ.30074-01 33 09
В единице трансляции нет ни одного внешнего объявления, которое могло бы быть
использовано из других единиц трансляции. Такой модуль не может быть использован из
других единиц трансляции.
FEC00103 ERROR
В программе необходимо хотя бы одно внешнее объявление
No program
В единице трансляции нет ни одного внешнего объявления, которое могло бы быть
использовано из других единиц трансляции. Такой модуль не может быть использован из
других единиц трансляции.
FEC00104 ERROR
объект '%s' неполного типа следует объявлять как 'extern'
Object '%s' of incomplete type might be declared extern
В объявлении массива не указана размерность, это допустимо только для объявления массивов
из других модулей, однако в этом случае необходимо явно указывать что объект имеет внешнее
связывание. Объявите массив как 'extern' или укажите размерность.
int a[];
FEC00105 ERROR
Нельзя инициализировать '%s' как агрегат
Cannot initialize '%s' like aggregate
Объект нельзя инициализировать агрегатом. Объекты классовых типов можно
инициализировать агрегатами только если они является POD структурами. Такой класс не
должен иметь ни одного конструктора, не должен содержать объектов с конструкторами или
иметь не общедоступные члены.
class A
{
int a;
};
A a = { 1 };
FEC00106 ERROR
Несовместимые типы '%s' и '%s' в операции '?:'
Incompatible types '%s' and '%s' in ?: operator
87
ЮФКВ.30074-01 33 09
Типы второго и третьего операнда в тернарной операции "?:" несовместимы. Это происходит,
когда не существует стандартного преобразования из одного типа в другой. Результат
вычисления тернарной операции должен давать один и тот же тип, вне зависимости от того,
второе или третье выражение будет вычислено.
void f( int i, void* pv )
{
int j = i ? i : pv;
}
FEC00107 ERROR
Нельзя преобразовать '%s' в '%s'
Cannot convert '%s' to '%s'
Ожидаемый тип в выражении не соответствует действительному типу выражения, и между
действительным типом и ожидаемым нет неявного преобразования. Проверьте действительный
тип выражения и ожидаемый тип, если необходимо добавьте явное преобразование типов
int f(void* pv)
{
return pv;
}
FEC00108 ERROR
Вызов применен не к функции и не к указателю на функцию
Call of nonfunction
FEC00109 ERROR
Рассогласование типов в присваивании '%s = %s'
Type mismatch for assign '%s' to '%s'
Тип левого и правого операнда в операции присваивания не соответствуют друг другу, и нет
операции неявного преобразования типов. Проверьте типы левого и правого операнда в
операции присваивания, если необходимо вставте операцию преобразования типа.
void f( int i )
{
void* pv;
pv = i;
}
FEC00110 ERROR
Нельзя присваивать значение объекту константного типа '%s'
88
ЮФКВ.30074-01 33 09
Cannot assign a value to object of constant type '%s'
Константа в пределах своей области видимости не может изменить свое значение после
инициализации. Вы можете снять констанатность с помощью 'const_cast', смотрите
документацию.
void f()
{
const int ci = 5;
ci = 3;
}
FEC00111 ERROR
Статический член класса '%s' инициализирован дважды
Static class member '%s' is initialized twice
Статический член класса может быть иницилизирован только один раз в программе. Удалите
повторную инициализацию статического члена класса.
class A
{
static int ai;
};
int A::ai = 1;
int A::ai = 2;
FEC00112 ERROR
неоднозначный оператор '?': 2-й операнд типа '%s' может быть преобразован к 3-му
операнду типа '%s' и наоборот
ambiguous '?' operation: second operand of type '%s' can be converted to third operand type
'%s', and vice versa
Статический член класса может быть иницилизирован только один раз в программе. Удалите
повторную инициализацию статического члена класса.
class A
{
static int ai;
};
int A::ai = 1;
int A::ai = 2;
FEC00113 ERROR
Функция '%s' описана как inline после ее использования как не-inline
89
ЮФКВ.30074-01 33 09
Function '%s' defined inline after use as non-inline
Предупреждение: 'inline' функции следует описывть до их первого использования. На некоторых
компилятора использование 'inline' функции до описания, может приводить к тому, что
компилятор не сможет сделать 'inline' функцию встраиваимой.
void f();
void g()
{
f();
}
inline void f()
{
}
FEC00114 ERROR
Нельзя образовывать ссылку на массив нулевой длины
Reference to a zero-sized array is illegal
Ссылку можно инициализировать только реально существующим объектом, массив нулевого
размера в С++ быть не может. Объявление массива нулевого размера означает, что где-то в
другом модуле существует массив не нулевого размера на который это объявление ссылается.
Для того что бы образовать ссылку необходимо знать истинное объявление объекта.
typedef int ai[];
extern int eai[];
ai &rai1 = eai;
int (&rai2)[] = eai;
FEC00115 ERROR
Неверный деструктор '%s'
Illegal destructor '%s'
FEC00116 ERROR
Нельзя объявлять тип при задании типа возвращаемого значения функции
Cannot define type as a function result type
В С++ нельзя объявлять типы при задании аргументов или возвращаемого значения функций. В
С такие объявления разрешены. Запрет связан с тем, что в С++ реализована именная
эквивалентность типов, а в С структурная. Так как область действия такого объявления является
областью действия парметров функции, то данное объявление не будет видно за пределами
объявления функции. С.1.6 [diff.decl] #2
90
ЮФКВ.30074-01 33 09
class A { } f(int a);
FEC00117 ERROR
Синтаксическая ошибка в описании пространства имен
Syntax error in namespace definition
Не верный синтаксис объявления 'namespace'. После служебного слова 'namespace' должен идти
необязательный идентификатор и открывающаяся фигурная скобка.
namespace class A {}
FEC00118 ERROR
Неверная конструкция после операции '::'
Illegal syntax after '::'
Ошибочный синтаксис после оператора '::', после оператора '::' должно идти имя члена класса,
пространства имен или глобального пространства имен. Проверьте синтаксис.
::int a;
FEC00120 ERROR
Для вызова '%s' следует использовать операции '.' или '->'
use '.' or '->' to call to '%s'
Нестатическая Функция член вне контекста этого класса должна вызыватся с использоанием
операции '.' или '->'. Измените способ вызова функции на использование операции '.' или '->'.
struct A
{
void operator +(A& a);
};
class B
{
void
g(A& a1, A& a2)
{
A::operator+(a1, a2);
}
};
FEC00121 ERROR
Деление на ноль
91
ЮФКВ.30074-01 33 09
Division by zero
При вычислении константных выражений произошло деление на ноль. Результат вычисления
выражения содержащего деление на ноль не определен.
int a[10/0];
FEC00123 ERROR
Нельзя сравнивать объекты типов '%s' и '%s'
Cannot compare objects of types '%s' and '%s'
Типы операндов в операции сравнения несравнимы, и между ними не существует операции
неявного преобразования типа. Проверьте типы операндов и, если необходимо, вставьте явное
преобразование типов.
bool f( void* pv, int i )
{
return pv i;
}
FEC00129 ERROR
Неверный тип условия в операторе '%s'
Illegal type in condition of '%s' statement
Недопустимый тип условия в операторе 'if', 'while', 'do', 'for' или 'switch'. Для операторов 'if',
'while', 'do' или 'for' условие должен иметь тип 'bool' или тип неявно преобразуемый к нему. Для
оператора 'switch' типы условия должен иметь интегральный, перечислимый тип или тип неявно
преобразуемый к первым двум. Проверьте тип условия в операторе и, если необходимо,
вставьте явное преобразование типов.
void f( void* pv )
{
switch(pv) {
case 0: return;
}
}
FEC00130 ERROR
Нельзя инициализировать ссылку на неконстантный объект не-l-значением
Cannot initialize reference to non-constant with non l-value
Так как через неконстантнюу ссылку объект может быть изменен, то образовывать
неконстантную ссылку на объект который нельзя изменять недопустимо. В случае если
необходимо образовать ссылку на объект, который нельзя изменять, то необходимо образовать
ссылку на константный объект.
92
ЮФКВ.30074-01 33 09
void f( const int& cri )
{
int& ri = cri;
}
FEC00132 ERROR
Переход на '%s'
Jump to '%s'
FEC00134 ERROR
Невозможно изменить константное значение типа '%s' в операции '%s'
Cannot change constant value of type '%s' in '%s' operator
Значения объектов константного типа в пределах их области видимости не может быть
изменено после инициализации. Однако константность может быть снята с помощью
преобразования 'const_cast', смотрите описание.
const int c = 5;
void f()
{
c++;
}
FEC00140 ERROR
Рассогласование типов в операции '%s' в константном выражении
Type mismatch for '%s' operator in constant expression
Битовые и логические операции определены только для интегральных типов. Проверьте типы
операндов и, если необходимо, добавьте явное преобразование типов.
int f( int i, float f )
{
return f & i;
}
FEC00143 ERROR
Удаление объекта неполного типа '%s'
Delete object of incomplete type '%s'
По Стандарту поведение реализации в этом случае не определено. В связи с тем, что для
объекты неполного типа не известно, есть ли у деструктор и доступен ли он, то генерируется
ошибка. Поместите полное объявление типа объекта до его удаления с помощью оператора
'delete'.
93
ЮФКВ.30074-01 33 09
class A;
void f( A* pa )
{
delete pa;
}
FEC00145 ERROR
Инициализация '%s' агрегатом не допускается
Aggregate initializer for '%s' is not allowed
Переменные, имеющие не массивный или классовый тип, разрешается инициализировать только
агрегатами с одним значением, наличие двух и более инициализирующих значений является
ошибкой. Не инициализируйте простые переменные агрегатами.
int i = { 1, 2 };
FEC00147 ERROR
Нельзя брать адрес битового поля '%s'
Cannot take an address of bit-field '%s'
Так как большинство процессоров не могут адресовать единичные биты в байте, то в С и С++
нельзя брать адрес битовых полей. Если необходимо брать адрес переменной, то сделайте ее
минимального по размеру типа 'char'. В большинстве случаев следует избегать использования
битовых полей.
struct S
{
int a : 3;
int* f()
{
return &a;
}
};
FEC00148 ERROR
В операции '%s' нельзя использовать операнды перечислимого типа '%s'
Cannot use '%s' operator for operand of type '%s'
В С++ операции '++' или '--' не определены для перечислимых типов, однако в С это разрешено.
В С можно применять операции '++' или '--' для перечислимых типов потому, что в С
перечислимый тип не вводит новый тип, перечисления рассматриваются как 'int' с
именованными значениями. В С++ перечислимые типы рассматриваются как самостоятельные
типы, для которых при необходимости можно перегружать различные операторы.
94
ЮФКВ.30074-01 33 09
enum E { e };
void f( E ee )
{
ee++;
}
FEC00149 ERROR
В постфиксной операции '%s' операнд не является l-значением
Operand is not an lvalue in postfix '%s' operator
Операнд для постфиксной операции '++' или '--' не является l-значением, а постфиксные
операции '++' или '--' применимы только для модифицируемых l-значений. Убедитесь, что
операндом для постфиксной операции '++' или '--' является l-значение.
void f( int i )
{
(i + 1)++;
}
FEC00150 ERROR
В данном контексте требуется константное выражение
Constant expression required in this context
В следующих контекстах требуется константы: Размер статических или автоматических
массивов должен быть константным, не константные размеры могут быть только у
динамических массивов. Значение перечислителей в перечислениях должны быть константами.
void f(int i)
{
int a[i];
}
FEC00151 ERROR
Возможно некорректное присваивание
Possible incorrect assignment
В условии есть операция присваивания '=', возможно это ошибка и должна быть операция
сравнения на равенство '=='. Проверьте не ошибка ли операция присваивания в условии.
void f(int i)
{
if(i = 5) i = 6;
}
95
ЮФКВ.30074-01 33 09
FEC00152 ERROR
Неописанная метка '%s' в функции %s
Undefined label '%s' in function %s
В операторе 'goto' используется имя не объявленной в этой функции метки. В С/С++ переход из
одной функции на метки из одной функции запрещен. Проверьте правильность написания
имени метки.
void f()
{
goto label;
}
FEC00153 ERROR
Переменной '%s' в функции %s присвоено значение, которое далее не используется
Variable '%s' is assigned a value that is never used in function %s
Предупреждение: в функции описана и инициализирована переменная, которая нигде не
используется. Так как область действия переменной описанной в функции ограничивается этой
функцией, то использование переменной вне функции невозможно и если переменная не
используется в функции, то она нигде не используется. Для повышения эффективность удалите
не используемую переменную.
void f()
{
int i = 5;
}
FEC00154 ERROR
Параметр '%s' функции '%s' не используется
Parameter '%s' of function '%s' is never used
Предупреждение: именованный параметр функции нигде не используется. Так как область
действия параметра функции ограничивается этой функцией, то использование параметра
функции вне ее невозможно и если параметр не используется в функции, то он нигде не
используется. Если Вы зарезервировали параметр для дальнейшего расширения возможностей
функции, то сделайте его безымянным для отключения предупреждения.
void f(int i)
{
}
FEC00155 ERROR
Отсутствует завершающий символ '>' в имени заголовочного файла пользователя
96
ЮФКВ.30074-01 33 09
Unterminated h-char-sequence
Имя системного заголовочного файла в директиве препроцессора '#include' должно быть
заключено в угловые скобки ('<>'). Так как директива препроцессора должна находится на
одной строке, то закрывающая угловая скобка должна находится на той же строке, что и
директива. Однако разрешено продолжать строки на следующей строке, для этого в конец
строки необходимо добавить символ '\'.
#include <iostream
> // Error
#include <iostream\
> // Ok
FEC00156 ERROR
Неизвестный идентификатор '%s' в глобальной области действия
Unknown identifier '%s' in global scope
Имя квалифицированное с помощью :: не найдено в глобальной области действия. Проверьте
правильность написания имени и видимость его в точке использования.
::E e;
FEC00157 ERROR
Член '%s' не может использоваться без указания объекта
Member '%s' cannot be used without an object
Нестатические члены классов не могут быть использованы без объекта. Так как каждый
экземпляр класса имеет свои копии всех нестатических объектов, то их использование без
указания для какого объекта они используются не возможно. Используйте не статически члены
классов только с указанием объекта, для которого они используются. Исключением являются
функции члены класса, которые не явно используют экземпляры нестатических данных объекта,
для которого они вызваны.
struct A
{
int a;
};
int f()
{
return A::a;
}
FEC00158 ERROR
Неверное имя '%s' в ctor-инициализаторах
97
ЮФКВ.30074-01 33 09
Invalid name '%s' in ctor-initializers
В списке ctor-инициализаторов можно указывать только имена нестатических собственных
членов класса, непосредственных невиртуальных базовых классов и виртуальных базовых
классов. Проверьте правильность написания имени.
class A
{
int b;
A() : B(1) {}
};
FEC00159 ERROR
Переменная '%s' объявлена в функции %s, но нигде не используется
Variable '%s' is declared in function %s but never used
Предупреждение: в функции описана переменная, которая нигде не используется. Так как
область действия переменной описанной в функции ограничивается этой функцией, то
использование переменной вне функции невозможно и если переменная не используется в
функции, то она нигде не используется. Для повышения эффективность удалите не
используемую переменную.
void f()
{
int i;
}
FEC00161 ERROR
В префиксной операции '%s' операнд не является l-значением
Operand is not an lvalue in prefix '%s' operator
Операнд для префиксной операции '++' или '--' не является l-значением, а префиксной операции
'++' или '--' применимы только для модифицируемых l-значений. Убедитесь, что операндом для
префиксной операции '++' или '--' является l-значение.
void f(int i)
{
++(i + 1);
}
FEC00162 ERROR
В унарной операции '&' операнд не является l-значением
Operand is not an lvalue in unary '&' operator
98
ЮФКВ.30074-01 33 09
Операндом для оператор взятия адреса может являться только l-значение. Операция взятия
адреса применима только для действительных объектов в памяти.
int* f( int& ri )
{
return &(ri + 1);
}
FEC00163 ERROR
Левый операнд операции '%s' не может иметь тип 'void'
Left operand of '%s' operator cannot be of type 'void'
FEC00164 ERROR
Правый операнд операции '%s' не может иметь тип 'void'
Right operand of '%s' operator cannot be of type 'void'
FEC00165 ERROR
Операнд унарной операции '%s' не может иметь тип 'void'
Operand of unary '%s' operator cannot be of type 'void'
FEC00166 ERROR
Нельзя применить операцию '%s' для операндов с типами '%s' и '%s'
Cannot apply '%s' operator for operands of types '%s' and '%s'
FEC00167 ERROR
Нельзя применить операцию '%s' для операндов типа '%s'
Cannot apply '%s' operator for operands of type '%s'
FEC00168 ERROR
Нельзя применить унарную операцию '%s' для операнда типа '%s'
Cannot apply unary '%s' operator for operand of type '%s'
FEC00169 ERROR
В операции '%s' левый операнд не является l-значением
Left operand is not an lvalue in '%s' operator
99
ЮФКВ.30074-01 33 09
Левым операндом для операций '=', '+=', '-=', '*=', '/=', '&=', '|=', '^=', '<<=' и '>>=' должно быть lзначение. Так как эти операции изменяют значение своего левого операнда, то он должен быть
объектом в памяти.
void f( int i )
{
(i + 1) += 5;
}
FEC00172 ERROR
Нельзя применять бинарную операцию '-' к указателям различных типов '%s' и '%s'
Cannot apply binary '-' operator for pointers of different types '%s' and '%s'
Так как результатом вычисления операции вычитания указателей является число элементов
данного типа между указателями, то оба операнда должны быть указателями на один и тот же
тип.
int f( int* pi, char* pc )
{
return pc - pi;
}
FEC00175 ERROR
Попытка взять адрес функции 'main'
Attempt to take address of function 'main'
Функция 'main' отлична от от обычных функций тем, что с нее начинается выполнение
программы. В программе не может быть использована функция 'main', единственное ee
предназначение - указывать начало выполнения программы.
int main()
{
if(&main == 0) return 0;
else return 1;
}
FEC00176 ERROR
Ссылка '%s' должна быть инициализирована
Reference '%s' must be initialized
Так как ссылка является только альтернативным именем для объекта, то при ее создании
необходимо указать объект, для которого она является синонимом. Так как ссылка после
создания всегда указывает на один и тот же объект, всегда инициализируйте ссылки при их
создании.
100
ЮФКВ.30074-01 33 09
int f()
{
int& ri;
return ri;
}
FEC00182 ERROR
Нельзя инициализировать POD-объект с помощью агрегатного инициализатора
Cannot init object of POD type with aggregate initializer
Инициализировать объекты классовых типов с помощью агрегатного инициализатора можно,
только если они являются POD структурами. POD структуры не должны содержать
конструктов, деструкторов, виртуальных функций членов и членов ссылочного типа, т.е.
представляют собой простые структуры С. Для инициализации объектов классового типа с
конструкторами всегда вызывайте конструктор.
struct A
{
int a;
A(){}
};
A a = { 1 };
FEC00183 ERROR
(старый стиль C++) размер массива для 'delete'
(old C++ style) array size for 'delete'
Предварительные версии Стандарта С++ требовали, что бы размер массивов явно указывался в
операции 'delete[]', однако в окончательная версия Стандарта вычисление размера удаляемого
массива возложено на компилятор и явное указание размера удаляемого массива запрещено.
Компилятор обеспечивает ключ совместимости с предыдущими версиями Стандарта -Xo, когда
эта ошибка выдается как предупреждение.
void f( char* pc, int с )
{
delete[с] pc;
}
FEC00184 ERROR
Функция типа 'void' не может возвращать значение
Void function cannot return a value
101
ЮФКВ.30074-01 33 09
Объявление функции с типов возвращаемого значения 'void' говорит от том, что данная функция
ничего не возвращает, поэтому возвращать значения из таких функций нельзя. Возврат из
функции без возвращения значения осуществляется оператором 'return' без аргумента.
void f()
{
return 1;
}
FEC00186 ERROR
Нельзя применять операцию 'new' для ссылочных типов
Cannot apply 'new' to a reference type
Так как ссылка не является объектом, а является альтернативным именем для уже
существующего объекта то ссылка не может быть создана с помощью оператора 'new'.
Возможно лучше использовать указатель, его можно создавать с помощью оператора 'new'. См.
5.3.4 [1]
int* f()
{
typedef int& rint;
return new rint;
}
FEC00187 ERROR
Функция '%s' должна возвращать значение
Function '%s' should return a value
Функция объявлена как возвращающая значение, однако по одному или нескольким возможным
путям выполнения функция не возвращает значения. Если Вы уверены, что выполнение не
может пойти по пути, в котором нет возвращаемого значения, то игнорируйте предупреждение.
int f()
{
}
FEC00188 ERROR
Русское сообщение
Cannot initialize array in 'new'
Так как не существует способа указать инициализирующие значения для всех элементов
массива выделяемого с помощью оператора 'new[]' то инициализация массивов запрещена. Если
элементы массива имеют тип определяемыми пользователем, то для каждого элемента массива
будет вызываться конструктор по умолчанию.
102
ЮФКВ.30074-01 33 09
int* p = new int[10](1);
FEC00190 ERROR
Невозможно найти соответствие для вызова '%s'
Cannot find match for call '%s'
Существует несколько совместно используемых функций, однако аргументы вызова не
подходят для вызова ни одного из них (или невозможно найти лучшую функцию). Проверьте
аргументы вызова и прототипы совместно используемых функций.
void f( void* pv );
void f( int* pi );
void g(int i)
{
f(i);
}
FEC00191 ERROR
Неоднозначность между '%s' и '%s'
Ambiguity between '%s' and '%s'
В двух базовых классах присутствуют члены с одинаковыми именами, поэтому при обращении
к этому имени, как из производного класса, так и вне производного класса, возникает
неоднозначность. Эту неоднозначность можно снять путем явной квалификации имени.
class A { public: int a; };
class B { public: int a; };
class C : public A, protected B
{
void f(C* p)
{
a = 5; // ambiguity A::a or B::a
}
};
FEC00192 ERROR
Рассогласование типов в параметре %d при вызове '%s'
Type mismatch in parameter %d in call to '%s'
Тип n-го аргумента при вызове функции не соответствует ожидаемому типу и не
преобразовывается в него с помощью неявных преобразований типа. Проверьте тип n-го
аргумента при вызове функции, если необходимо вставьте явное преобразование типов.
103
ЮФКВ.30074-01 33 09
void f( void* pv );
void g( int i )
{
f(i);
}
FEC00193 ERROR
Неверное число параметров в вызове '%s'
Extra or missing parameters in call to '%s'
Существует несколько совместно используемых функций, однако число аргументов вызова не
подходят для вызова ни одной из них. Проверьте число аргументов вызова и прототипы
совместно используемых функции.
void f( void* pv );
void f( int* pi );
void g()
{
f();
}
FEC00194 ERROR
Недопустимый тип '%s' аргумента шаблона
Illegal type '%s' of template argument
Нетиповой аргумент шаблона не соответствует типу параметра шаблона и неявно не
преобразуется в него.
template<void*> class A {};
int i;
A<&i> ad;
FEC00195 ERROR
Левый операнд операции '.' или '.*' должен иметь классовый тип
Class required on left side of '.' or '.*' operator
Левый операнд для операций выбора члена должен иметь классовый тип. Убедитесь что левый
операнд классового типа.
void f( int i )
{
104
ЮФКВ.30074-01 33 09
i.x = 5;
}
FEC00196 ERROR
Левый операнд операции '->' или '->*' должен иметь тип указателя на класс
Pointer to class required on left side of '->' or '->*' operator
Левый операнд для операций выбора члена по указателю на класс должен либо иметь тип
указатель на класс либо перегружать соответствующий оператор. Перегруженный оператор
должен в свою очередь возвращать тип, который либо перегружает тот же оператор либо
является указателем на класс.
void f( int i )
{
i.x = 5;
}
FEC00197 ERROR
'%s' не является членом '%s'
'%s' is not a member of '%s'
В 'namespace' или 'class' нет члена с таким именем. Проверьте объявление 'namespace', 'class' или
имя члена.
class A
{
};
void A::f();
FEC00198 ERROR
Недоступный базовый класс '%s', базовый класс описан также в '%s'
Inaccessible base '%s'; base is also defined in '%s'
Предупреждение неоднозначный непосредственный базовый класс недоступен, так существует
другой непосредственный базовый класс, у которого этот класс базовый. Не наследуйте класс от
недоступного базового класса, так как в результирующем классе он уже есть.
class A {};
class B : public A {};
class C : public A, public D {};
FEC00199 ERROR
Невозможно повторно объявить функцию '%s' как статическую
105
ЮФКВ.30074-01 33 09
Cannot redeclare function '%s' as static
FEC00200 ERROR
Рассогласование типов в повторном объявлении '%s'
Type mismatch in redeclaration of '%s'
Тип объекта или функции в первом объявлении не соответствует типу во втором
объявлении/определении. Проверте типы в объявлениях.
class A
{
void f();
};
int A::f()
{
return 0;
}
FEC00201 ERROR
Невозможно найти конструктор по умолчанию для инициализации элемента массива типа
'%s'
Cannot find default constructor to initialize array element of type '%s'
FEC00202 ERROR
Невозможно найти конструктор в '%s'
Cannot find a constructor in '%s'
FEC00203 ERROR
Использование типа '%s' в операции 'sizeof' не допускается
Type '%s' is not allowed in 'sizeof' operator
Тип или объект этого типа не могут быть использованы в качестве операнда операции 'sizeof'.
Не применяйте операцию 'sizeof' к типам или объектам незавершенного или функционального
типа, перечислимого типа до описания членов перечисления, а также к l-значениям,
ссылающимся на битовые поля. См. 5.3.3 [1]
int f()
{
// the 'void' type is an incomplete type (3.9.1 [9])
return sizeof(void);
}
106
ЮФКВ.30074-01 33 09
FEC00204 ERROR
'операция %s' объявлена вне класса
'operator %s' declared outside a class
FEC00205 ERROR
Операция '%s' объявлена вне класса
Operator '%s' declared outside a class
FEC00207 ERROR
Невозможно инициализировать объединение более чем одним агрегатным членом
Cannot initialize union with more then one aggregate member
При инициализации объединения агрегатным инициализатором в фигурных скобках может быть
указан только инициализатор для первого члена объединения. Не используйте инициализаторы
для нескольких членов объединения. Не используйте инициализатор, тип которого не
соответствует типу первого члена объединения. См. 8.5.1 [15]
union U
{
float f;
int i;
};
void g()
{
U u = {3.14, 10};
}
FEC00208 ERROR
Слишком много инициализаторов для агрегата '%s'
Extra initializer in aggregate '%s'
При инициализации агрегата в фигурных скобках не допускается указывать больше
инициализаторов чем число членов или элементов агрегата. См. 8.5.1 [6]
void g()
{
char s[2] = {'a', 'b', 'c'};
}
FEC00209 ERROR
107
ЮФКВ.30074-01 33 09
Использование списка инициализаторов для инициализации объекта типа '%s' без
конструкторов
Cannot use list of initializers to initialize object of type '%s' without constructors
Скобочный инициализатор '()' может содержать список выражений только при инициализации
объекта классового типа. При инициализации объектов прочих типов скобочный инициализатор
не может содержать более одного выражения. См. 8.5 [11]
void g()
{
int* ptr = new int(10, 10);
}
FEC00210 ERROR
Недопустимый инициализатор для массива '%s'
Illegal initializer for array '%s'
Указанный массив не может быть инициализирован использованным инициализатором. Массив
является агрегатом и инициализируется заключенным в фигурные скобки списком
инициализаторов. Массив символов ('char[]' и 'wchar_t[]') может быть также инициализирован
строковым литералом. См. 8.5.1, 8.5.2 [1]
int a[] = 10;
FEC00211 ERROR
'%s' не является базовым классом для '%s'
'%s' is not a base of '%s'
В данном контексте требуется, чтобы 'класс A' был базовым классом для 'класс B'. См 7.3.3 [4]
('using')
class A // : public B
{
int f();
};
class B
{
using A::f;
};
FEC00212 ERROR
В явном приведении типа должно быть одно выражение
Must be one expression in an explicit type cast
108
ЮФКВ.30074-01 33 09
FEC00213 ERROR
Функция преобразования не может быть статической
Conversion function cannot be static
FEC00214 ERROR
Имя деструктора должно соответствовать имени класса
Destructor name must match the class name
Имя деструктора должно быть составлено из символа '~', непосредственно за которым следует
имя класса деструктора. Символ '~' вместе с именем класса деструктора могут быть заключены в
круглые скобки '()', которые игнорируются. При явном вызове деструктор подчиняется
обычным правилам для функций-членов класса, а именно если объект класса, для которого
вызывается деструктор, не является объектом класса деструктора или объектом класса,
производного от класса деструктора, то поведение программы не определено. См. 12.4 [1], 12.4
[12]
void f()
{
class A {} a;
a.~B();
}
FEC00216 ERROR
Рассогласование типов при инициализации '%s' '%s'
Type mismatch in initialization of '%s' by '%s'
Тип результата инициализирующего выражения не может быть приведен к типу
инициализируемой сущности. См. 8.5 [14]
int* pointer = 1;
FEC00217 ERROR
Операция 'delete' не может быть применена к объекту типа '%s'
Operator 'delete' cannot be applied to an object of type '%s'
Операнд операции 'delete' должен иметь указательный тип или классовый тип с одной функцией
преобразования к указательному типу. См. 5.3.5 [1]
void f()
{
delete 1;
}
109
ЮФКВ.30074-01 33 09
FEC00218 ERROR
Описание пространства имен должно находиться в глобальной области действия или в
области действия пространства имен
Namespace definition must appear in the global scope or in a namespace scope
Не описывайте пространства имен в области действия функций или классов. См. 7.3 [4]
void f()
{
namespace N {}
}
FEC00219 ERROR
Невозможно использование ранее описанного имени '%s' в качестве имени пространства
имен
Cannot use the previously defined name '%s' as a namespace name
Имя пространства имен не должно быть объявлено ранее в той же области действия в какомлибо другом качестве. См. 7.3.1 [2]
class N {};
namespace N {}
FEC00220 ERROR
Битовое поле не может быть статическим членом класса
A bit-field cannot be a static member
Не объявляйте битовые поля со спецификатором 'static'. См. 9.6 [3]
English comment
class A
{
static int bits : 4;
};
FEC00221 ERROR
Битовое поле должно иметь целочисленный или перечислимый тип
A bit-field must have integral or enumeration type
Не объявляйте битовые поля других типов. См. 9.6 [3]
110
ЮФКВ.30074-01 33 09
class A
{
float bits : 4;
};
FEC00222 ERROR
Статическая или встроенная функция '%s' объявлена, но не описана
Static or inline function '%s' is declared but not defined
FEC00224 ERROR
Невозможно инициализировать нестатические члены класса (необходимо использовать
ctor-инициализаторы)
Cannot initialize non-static class members (use ctor-inits)
FEC00225 ERROR
Объявление шаблона в текущем контексте невозможно
Cannot declare template in the current context
Объявление шаблона допускается в области действия пространства имен и в области действия
нелокальных классов. Не объявляйте шаблоны в области действия функций и в области
действия локальных классов. См. 14 [2], 14.5.2 [2]
void f()
{
template<class T> class A {};
}
FEC00226 ERROR
Передача не-l-значения по ссылке в параметре %d (сформирован временный объект)
Passing non-lvalue by reference in parameter %d (temporary created)
FEC00227 ERROR
Слишком большое число параметров при вызове '%s'
Extra parameters in call to '%s'
При вызове функции число фактических параметров оказалось больше, чем число формальных.
Проверьте соответствие фактических и формальных параметров. Для передачи большего числа
параметров, чем указано в описании функции, используйте '...'. Пр. Сообщение используется
только в том случае, когда выбор функции с помощью алгоритма 'BestMatching' не происходит.
См. 5.2.2 [6], 5.2.2 [7]
111
ЮФКВ.30074-01 33 09
void (*pf)(int x);
void g()
{
pf(1, 2);
}
FEC00228 ERROR
'%s' должна быть функцией-членом класса
'%s' must be a member function
Указанная функция-операция должна быть функцией-членом класса. Проверьте знак операции,
количество и тип ее параметров.
int operator[](int index);
FEC00229 ERROR
Функция-член класса '%s' должна быть объявлена без параметров
Member function '%s' must be declared without parameters
Функция-член класса, которая является функцией-унарной операцией или функцией-операцией
доступа к членам класса, должна быть объявлена без параметров, так как единственным
необходимым ей параметром является указатель 'this'. См. 13.5.1 [1], 13.5.6 [1]
class A
{
A operator!(int x);
};
FEC00231 ERROR
'%s' не может быть объявлена со спецификатором 'static'
'%s' cannot be 'static'
Функция-операция не может быть статической функцией-членом класса. См. 13.5 [6]
class A
{
static A operator!();
};
FEC00232 ERROR
'%s' должен иметь параметр классового или перечислимого типа
'%s' must have a parameter of class or enumeration type
112
ЮФКВ.30074-01 33 09
FEC00233 ERROR
В постфиксной форме '%s' должен иметь последний параметр типа 'int'
Postfix '%s' must have the last parameter of type 'int'
FEC00234 ERROR
'%s()' должна иметь тип '%s'
'%s()' must return '%s'
FEC00235 ERROR
'%s' должна иметь первый параметр типа 'size_t'
'%s' must have the 1st parameter of type 'size_t'
FEC00236 ERROR
Второй параметр '%s' должен иметь тип 'size_t'
The 2nd parameter of '%s' must be of type 'size_t'
FEC00237 ERROR
Возможно неверное округление значения с плавающей точкой (%s) до целочисленного
значения
Possible incorrect rounding floating value (%s) to integer value
FEC00239 ERROR
Недостаточно параметров для настройки шаблона '%s'
Missing parameters in template instantiation '%s'
FEC00240 ERROR
параметр для '%s' не должен иметь классовый тип, так как он используется в объявлении
параметра шаблона
Actual parameter for '%s' must be a non-class type because it is used in a template parameter
declaration
FEC00241 ERROR
Условие в '%s' всегда истинно
Condition in '%s' is always true
113
ЮФКВ.30074-01 33 09
FEC00242 ERROR
Условие в '%s' всегда ложно
Condition in '%s' is always false
FEC00243 ERROR
Размерность массива не может быть отрицательной (%ld)
Array size cannot be negative (%ld)
FEC00244 ERROR
неописанное пространство имен '%s'
Undefined namespace '%s'
FEC00245 ERROR
%s в данной версии не реализованы
%s are not implemented yet
FEC00246 ERROR
В вызове '%s' пропущен(ы) параметр(ы)
Missing parameter(s) in call to '%s'
При вызове функции число фактических параметров оказалось меньше, чем число формальных.
Проверьте соответствие фактических и формальных параметров. Для передачи меньшего числа
параметров, чем указано в описании функции, используйте аргументы по умолчанию. Пр.
Сообщение используется только в том случае, когда выбор функции с помощью алгоритма
'BestMatching' не происходит. См. 5.2.2 [6], 5.2.2 [7]
void (*pf)(int x, int y);
void g()
{
pf(1);
}
FEC00247 ERROR
Битовое поле не может быть операндом 'sizeof'
Bitfields are not allowed in 'sizeof'
FEC00248 ERROR
114
ЮФКВ.30074-01 33 09
Невозможно получить размер функции
Cannot get function storage size
FEC00249 ERROR
Размер '%s' неизвестен
Storage size of '%s' is unknown
FEC00250 ERROR
Неизвестный язык '%s' в спецификации связывания
Unknown language '%s' in linkage specification
FEC00251 ERROR
Спецификация связывания допускается только в области действия файла
Linkage specification may occur only in the file scope
FEC00252 ERROR
(internal) '%s' in '%s()' function
(internal) '%s' in '%s()' function
FEC00253 ERROR
(internal) '%s'
(internal) '%s'
FEC00254 ERROR
(internal) unexpected '%s' '%s'
(internal) unexpected '%s' '%s'
FEC00255 ERROR
Излишнее предварительное объявление '%s'
Superfluous forward declaration '%s'
FEC00256 ERROR
Правым операндом операции '.*' или '->*' должен быть указатель на член класса
Pointer to class member required in right operand of '.*' or '->*' operator
115
ЮФКВ.30074-01 33 09
FEC00257 ERROR
операцию '--' нельзя применять к операнду типа 'bool'
Cannot apply '--' operator for operand of type 'bool'
FEC00258 ERROR
Результат операции '++' для типа 'bool' есть всегда true
The result of '++' operator for operand of type 'bool' is always 'true'
FEC00259 ERROR
Недопустимый тип '%s' для левого операнда операции '%s'
Illegal type '%s' in left operand of '%s' operator
FEC00260 ERROR
Недопустимый тип '%s' для правого операнда операции '%s'
Illegal type '%s' in right operand of '%s' operator
FEC00261 ERROR
В выражении возможно переполнение
Possible overflow in expression
FEC00262 ERROR
Рассогласование классовых типов для левого операнда операции '.*' или '->*'
Class type mismatch in left operand of '.*' or '->*' operator
FEC00263 ERROR
Невозможно преобразование не-l-значения к ссылочному типу '%s'
Cannot convert non-lvalue to reference type '%s'
FEC00264 ERROR
Передача объекта классового типа в качестве параметра в функцию с '...'
Passing C++ style class with ellipsis as data structure
FEC00265 ERROR
Должна быть вызвана функция-член класса
116
ЮФКВ.30074-01 33 09
Member function must be called
FEC00266 ERROR
Инициализация статического члена класса '%s' в данном месте невозможна
Static member '%s' cannot be initialized here
FEC00267 ERROR
Имя члена класса '%s' совпадает с именем класса
Member '%s' has the same name as its class
FEC00268 ERROR
Член %s в '%s' недоступен
%s member '%s' is not accessible
FEC00269 ERROR
Объединение не может быть базовым классом
Union cannot be a base class
FEC00270 ERROR
(III pass only) function %s with ellipsis cannot be inlined
(III pass only) function %s with ellipsis cannot be inlined
FEC00271 ERROR
(III pass only) function %s not inlined (move function body before)
(III pass only) function %s not inlined (move function body before)
FEC00272 ERROR
(III pass only) function %s not inlined (too complex expression)
(III pass only) function %s not inlined (too complex expression)
FEC00273 ERROR
Невозможно взятие адреса подставляемой функции '%s'
Cannot take an address of inline function '%s'
FEC00274 ERROR
117
ЮФКВ.30074-01 33 09
Невозможно взятие адреса объекта '%s', объявленного со спецификатором 'register'
Cannot take an address of 'register' object '%s'
FEC00275 ERROR
Попытка возврата указателя или ссылки на локальный объект '%s'
Attempt to return pointer or reference to local object '%s'
FEC00276 ERROR
(internal) для функции '%s' не задан адресный контекст
No function address context defined for function '%s'
FEC00277 ERROR
Невозможно найти функцию с именем '%s' типа '%s'
Cannot find function with name '%s' of type '%s'
FEC00278 ERROR
Невозможно найти или выбрать функцию типа '%s'
Cannot find or choose function of type '%s'
FEC00279 ERROR
Обработчик вида catch(...) должен быть последним в блоке-с-контролем
catch(...) must be the last handler
FEC00280 ERROR
Невозможно передать параметр абстрактного типа '%s'
Cannot pass parameter of abstract type '%s'
FEC00281 ERROR
'%s' имеет незавершенный тип
'%s' still has incomplete type
FEC00282 ERROR
Нулевой операнд в операции 'delete'
Operand of 'delete' expression is always 0
118
ЮФКВ.30074-01 33 09
FEC00283 ERROR
Невозможно объявить член класса, не являющийся функцией, без спецификатора
Cannot declare non-function member without a specifier
FEC00284 ERROR
Неверный синтаксис 'asm'-описания
Illegal syntax of asm-definition
FEC00285 ERROR
(III pass only) function `%s' has ellipsis as first parameter
(III pass only) function `%s' has ellipsis as first parameter
FEC00286 ERROR
Преобразование 'static_cast<%s>' для '%s' невозможно
static_cast<%s> cannot convert '%s'
FEC00287 ERROR
Преобразование 'dynamic_cast<%s>' для '%s' невозможно
dynamic_cast<%s> cannot convert '%s'
FEC00288 ERROR
преобразование 'reinterpret_cast <%s>' для '%s' невозможно
reinterpret_cast <%s> cannot convert '%s'
FEC00289 ERROR
Преобразование 'const_cast<%s>' для '%s' невозможно
const_cast<%s> cannot convert '%s'
FEC00291 ERROR
Все размерности массива кроме первой должны быть указаны явно
Cannot miss size for non-first array dimension
FEC00292 ERROR
Использование конструктора 'explicit %s' в неявном приведении типа не допускается
119
ЮФКВ.30074-01 33 09
Cannot apply 'explicit %s' to implicit type conversion
FEC00293 ERROR
Применение операции 'delete' к указателю на абстрактный класс '%s'
'delete' on pointer to abstract class '%s'
FEC00294 ERROR
Инициализированный статический член класса должен иметь целочисленный или
перечислимый тип
Initialized static member must have integral or enumeration type
FEC00295 ERROR
В данном контексте невозможно использовать неописанный шаблон '%s'
Cannot use undefined template '%s' in this context
FEC00296 ERROR
Невозможно настроить неописанный шаблон '%s'
Cannot instantiate undefined template '%s'
FEC00297 ERROR
Операция 'dynamic_cast' преобразует '%s' в себя
'dynamic_cast' converts '%s' to itself
FEC00298 ERROR
Операция 'dynamic_cast<%s>' заменена на неявное преобразование
'dynamic_cast<%s>' is replaced with implicit cast
FEC00299 ERROR
Обращение к объекту '%s' в текущей области действия из using-объявления невозможно
Cannot refer to an object '%s' from the current scope in 'using' declaration
FEC00300 ERROR
Обращение к конструктору из using-объявления невозможно
'using' declaration cannot refer to a constructor
120
ЮФКВ.30074-01 33 09
FEC00301 ERROR
Функция преобразования не может существовать в области действия пространства имен
Conversion function cannot exist in a namespace scope
FEC00302 ERROR
'operator %s()' отсутствует в '%s'
Cannot find 'operator %s()' in '%s'
FEC00303 ERROR
using-объявление для члена класса '%s' должно быть объявлением члена класса
'using' declaration for a class member '%s' must be a member declaration
FEC00304 ERROR
Обращение к члену '%s' класса '%s' вне области действия класса невозможно
Cannot refer to a member '%s' of class '%s' in a non-class scope
FEC00305 ERROR
Константный член '%s' в классе без конструкторов
Constant member '%s' in class without constructors
FEC00306 ERROR
Член '%s' не может быть инициализирован в ctor-инициализаторах
Member '%s' cannot be initialized in ctor-initializer
FEC00307 ERROR
Член класса '%s' константного или ссылочного типа должен быть инициализирован в
ctor-инициализаторах
Member '%s' of constant or reference type must be initialized in ctor-initializer
FEC00308 ERROR
Член '%s' ссылочного типа в классе без конструкторов
Member '%s' of reference type in class without constructors
FEC00309 ERROR
121
ЮФКВ.30074-01 33 09
Неопределенный класс или пространство имен '%s'
Undefined class or namespace '%s'
FEC00310 ERROR
Слишком много инициализаторов для массива (широких) символов '%s'
Extra initializer for (wide) character array '%s'
FEC00312 ERROR
Конструктор не может быть виртуальным
Constructor cannot be virtual
FEC00313 ERROR
Неоднознаный базовый класс '%s' для '%s'
'%s' is ambiguous base class of '%s'
FEC00314 ERROR
'%s' не является публичным базовым классом для '%s'
'%s' is not a 'public' base class of '%s'
FEC00316 ERROR
'%s' является неоднозначным базовым классом для '%s'
'%s' is ambiguous public base class of '%s'
FEC00317 ERROR
Индекс превышает максимальный индекс элементов массива '%s'
Index is out of array '%s' bound
FEC00319 ERROR
Class member '%s' hides base class virtual function '%s'
Class member '%s' hides base class virtual function '%s'
FEC00320 ERROR
Виртуальная функция '%s' имеет спецификатор доступа 'private'
Virtual function '%s' has private access
122
ЮФКВ.30074-01 33 09
FEC00321 ERROR
Тип возвращаемого значения функции '%s' не совпадает с типом возвращаемого значения
совместно используемой функции '%s'
Return type of the function '%s' do not match the type of overriding function '%s'
FEC00322 ERROR
Нельзя использовать '%s' в модификаторе доступа внутри '%s'
Cannot use '%s' in access modifier inside '%s'
FEC00323 ERROR
Не указано значение по умолчанию для параметра функции '%s'
Missing default value for function parameter '%s'
FEC00324 ERROR
Не указано значение по умолчанию для анонимного параметра функции
Missing default value for unnamed function parameter
FEC00325 ERROR
В спецификации исключения задан массив '%s'
Array type '%s' in the exception specifications
FEC00326 ERROR
Спецификация исключения совместно используемой виртуальной функции '%s' не
должно быть менее строгим, чем у '%s'
Exception specifications of the override virtual function '%s' shall not be less restrictive then of
'%s'
FEC00327 ERROR
cv-квалификаторы верхнего уровня для типа '%s' в спецификации исключения
игнорируются
Top-level cv-qualifiers of type '%s' ignored in the exception specification
FEC00328 ERROR
Параметр обработчика 'catch' не может иметь незавершенный тип '%s'
'catch' handler parameter shall not have incomplete type '%s'
123
ЮФКВ.30074-01 33 09
FEC00329 ERROR
В массиве должен быть как минимум один элемент
Array must have at least one element
FEC00330 ERROR
Инициализатор перечислителя должен быть целочисленной константой
Enumerator initializer must be an integer constant
FEC00331 ERROR
Невозможно использовать нетиповой параметр шаблона '%s' как базовый класс
Cannot use non-type template parameter '%s' as a base class
FEC00332 ERROR
Внутренняя ошибка
Internal program error
FEC00333 ERROR
Тип '%s' в базовом классе настройки шаблона - не класс, а '%s'
Type '%s' for base class of instantiation is not a class but '%s'
FEC00334 ERROR
'операция %s' всегда статическая и не может быть объявлен со спецификатором 'virtual'
'operator %s' is always static; cannot be declared 'virtual'
FEC00336 ERROR
Функция преобразования '%s' нигде не используется
Conversion function '%s' will never be used
FEC00339 ERROR
Ошибка выведения: использование нетипового параметра не допускается
Deduction error: non-type parameter shall not be used in expression in the function declaration
FEC00340 ERROR
Обращение к '%s' без служебного слова невозможно
124
ЮФКВ.30074-01 33 09
Cannot refer to '%s' without a keyword
FEC00341 ERROR
Преобразование к типу массива '%s' не допускается
Conversion to array type '%s' is not allowed
FEC00342 ERROR
Функция не может возвращать абстрактный тип '%s'
Function cannot return abstract type '%s'
FEC00343 ERROR
Функция, не являющаяся членом класса, не может виртуальной
Non-member function cannot be declared 'virtual'
FEC00344 ERROR
Спецификатор класса памяти 'static' для '%s' не допускается
'static' storage specifier for '%s' is prohibited
FEC00345 ERROR
Неверный спецификатор типа '%s'
Invalid type specifier '%s'
FEC00346 ERROR
Спецификатор inline не может быть использован в локальных объявлениях функций
'inline' specifier shall not be used in local function declaration
FEC00347 ERROR
cv-квалификаторы верхнего уровня для типа возвращаемого функцией значения
игнорируются
Top-level cv-qualifiers are ignored for function return type
FEC00348 ERROR
Функция '%s' не может иметь параметров по умолчанию
Function '%s' shall not have default arguments
125
ЮФКВ.30074-01 33 09
FEC00349 ERROR
Строковый литерал имеет тип 'const char[]'
String literal has type 'const char[]'
FEC00350 ERROR
Имя локального объекта '%s' не может быть здесь использовано
Local object name '%s' cannot be use here
FEC00352 ERROR
Член класса '%s', объявленный со спецификатором 'mutable', не может быть статическим
'mutable' class member '%s' cannot be 'static'
FEC00353 ERROR
Член класса '%s', объявленный со спецификатором 'mutable', не может иметь
спецификатор 'const' верхнего уровня
'mutable' class member '%s' cannot have top-level 'const' type modifier
FEC00354 ERROR
Функция преобразования не может иметь переменное число аргументов
Conversion function cannot have '...' in parameter list
FEC00355 ERROR
Конструктор '%s' не может иметь параметр этого типа
Constructor of '%s' cannot have parameter of the same type
FEC00356 ERROR
Объединение не может содержать статические данные-члены
Union cannot have 'static' data member
FEC00357 ERROR
Объединение не может содержать члены ссылочного типа '%s'
Union cannot have member of type '%s' because of reference type
FEC00358 ERROR
126
ЮФКВ.30074-01 33 09
Модификаторы доступа использовать не рекомендуется (используйте using-объявление)
Access declarations are deprecated (use 'using' instead)
FEC00360 ERROR
Объявление статических объектов в области действия пространства имен не
рекомендуется
Declaration of 'static' object in the namespace scope is deprecated
FEC00361 ERROR
Статические функции-члены не могут иметь спецификатор 'const' или 'volatile'
'static' member function cannot have 'const' or 'volatile' modifiers
Для статических функций членов класса нельзя использовать спецификаторы 'const/volatile' так
как они не получают указатель 'this', а спецификаторы воздействуют имнно на него, поэтому
использование бессмысленно.
class A
{
static void f() const;
};
FEC00362 ERROR
Попытка вызова чистой виртуальной функции '%s' при помощи квалифицированного
имени
Attempt to call pure virtual function '%s' with qualification
FEC00363 ERROR
Попытка вызова чистой виртуальной функции '%s' из конструктора или деструктора
Attempt to call pure virtual function '%s' from the constructor or destructor
FEC00364 ERROR
Первый параметр операции 'delete' должен иметь тип 'void*'
First parameter of 'operator delete' must have 'void*' type
FEC00365 ERROR
Повторное объявление значения по умолчанию для параметра %d
Duplicated default parameter definition for parameter %d
127
ЮФКВ.30074-01 33 09
FEC00366 ERROR
'%s' не может быть объявлен в анонимном объединении
'%s' cannot be declared in the anonymous union
FEC00367 ERROR
Анонимное объединение не может содержать скрытый или защищенный член '%s'
Anonymous union shall not have 'private' or 'protected' member '%s'
FEC00368 ERROR
Член класса не может быть объявлен со спецификатором 'auto' или 'register'
Class member cannot be declared 'auto' or 'register'
FEC00369 ERROR
Невозможно объявить typedef-имя '%s' для пустого типа
Cannot declare 'typedef' alias '%s' to empty type
FEC00370 ERROR
Функция не может иметь параметр указательного или ссылочного типа на массив с
неизвестными границами
Function cannot have parameter of type pointer or reference to array of unknown bound
FEC00371 ERROR
Локальная переменная '%s' не может быть использована в качестве значения параметра
по умолчанию
Local variable '%s' cannot be used in a default argument
FEC00372 ERROR
Локальный класс не может содержать статический член '%s'
Local class cannot have 'static' data member '%s'
FEC00373 ERROR
Невозможно применить операцию 'sizeof' для объекта '%s' незавершенного типа
Cannot apply 'sizeof' to incomplete object '%s'
FEC00374 ERROR
128
ЮФКВ.30074-01 33 09
Невозможно передать параметр незавершенного типа '%s'
Cannot pass parameter of incomplete type '%s'
FEC00375 ERROR
Невозможно вызвать функцию, возвращающую объект незавершенного типа '%s'
Cannot call function returning incomplete type '%s'
FEC00376 ERROR
Функция '%s' со спецификацией связывания 'C' не может быть совместно используемой
Functions '%s' with 'C' linkage cannot be overloaded
FEC00377 ERROR
Явный вызов деструктора базового класса '%s'
Explicit call for base class destructor '%s'
FEC00378 ERROR
Невозможно объявить ссылку со спецификатором 'const' или 'volatile'
Cannot declare 'const' or 'volatile' reference
FEC00380 ERROR
'%s' не может быть шаблоном
'%s' cannot be template
FEC00381 ERROR
После служебного слова 'typename' должно следовать квалифицированное имя
The keyword 'typename' shall only be applied to qualified names
FEC00382 ERROR
Квалифицированное имя после 'typename' обозначает не тип, а '%s'
Qualification after 'typename' names non-type entity '%s'
FEC00383 ERROR
Имя типа может быть использовано только внутри шаблона
Typename may only be used within a template
129
ЮФКВ.30074-01 33 09
FEC00384 ERROR
В объявлении '%s' не задан тип
No type specified in declaration of '%s'
C;
FEC00385 ERROR
Значения перечислителей не соответствуют никакому целочисленному типу
Enumerator values do not correspond any intergral type
FEC00386 ERROR
(III pass only) bit-fields of type `%s' are allowed, but not supported in this implementation
(III pass only) bit-fields of type `%s' are allowed, but not supported in this implementation
FEC00387 ERROR
Размер битового поля '%s' слишком велик (%d), поле усечено до размера его типа (%d)
The width of bit-field '%s' is too large (%d), truncated to its type's size (%d)
FEC00388 ERROR
Нет подходящего конструктора копирования для объекта типа '%s'
No suitable constructor to copy object of type '%s'
FEC00389 ERROR
Недопустимый указатель на член класса ссылочного типа
Illegal pointer to member of reference type
FEC00390 ERROR
Некорректный спецификатор перечислимого типа
Incorrect enum type specifier
FEC00391 ERROR
Некорректное использование спецификатора
Incorrect usage of a specifier
FEC00394 ERROR
130
ЮФКВ.30074-01 33 09
В явной специализации шаблона должно быть использовано имя шаблона, а не '%s'
Template-id must be used in explicit specialization, but not '%s'
FEC00395 ERROR
Невозможно применить операцию 'typeid' к полиморфному типу, так как 'class
std::bad_typeid' не описан
Cannot perform 'typeid' for polymorphic type because 'class std::bad_typeid' is not defined
FEC00396 ERROR
Конструктор не может быть статическим
Constructor cannot be 'static'
FEC00397 ERROR
Некорректная форма псевдодеструктора
Illegal form of pseudo-destructor
FEC00398 ERROR
Невозможно использовать псевдодеструктор для типа '%s'
Cannot use pseudo-destructor for type '%s'
FEC00399 ERROR
Псевдодеструктор используется для иного типа
Pseudo-destructor is used for different type
FEC00400 ERROR
Деструктор не может быть статическим
Destructor cannot be 'static'
FEC00401 ERROR
Невозможно применить операцию 'delete' к указателю на функцию
Cannot apply 'delete' to pointer to function
FEC00402 ERROR
Недопустимый размер битового поля (%d)
131
ЮФКВ.30074-01 33 09
Illegal bit-field size (%d)
FEC00403 ERROR
Оператор присваивания по умолчанию для '%s' не может быть использован, так как
класс содержит нестатический член константного или ссылочного типа '%s'
Default copy assignment operator cannot be used because the class has nonstatic member of
constant or reference type '%s'
Операция присваивания по умолчанию для '%s' не может быть использована, так как класс
содержит нестатический член константного или ссылочного типа. Операция присваивания по
умолчанию осуществляет присваивание каждого подобъекта согласно его типу (12.8 [13]).
Изменение значения объектов 'const' типа присваиванием не допускается. (Что там про ссылки?)
12.8 [12] ... A program is ill-formed if the class for which a copy assignment operator is implicitly
defined has: - a nonstatic data member of 'const' type, or - a nonstatic data member of reference type ...
FEC00404 ERROR
Неописанное значение перечислимого типа
Undefined value of enumeration type
FEC00405 ERROR
Слишком много ошибок и/или предупреждений; компиляция прервана
Too many errors and/or warnings - compilation abandoned
FEC00406 ERROR
Ожидается '%s'
'%s' expected
FEC00407 ERROR
Объект '%s' может быть инициализирован только как агрегат
'%s' may only be initialized as agregate
FEC00413 ERROR
Параметр функции по умолчанию не может быть инициализирован агрегатом
Function default parameter cannot be initialized as aggregate
FEC00414 ERROR
Typedef-имя '%s' не может быть использовано со служебным словом 'class', 'struct' или
'union'
132
ЮФКВ.30074-01 33 09
Typedef-name '%s' shall not be used with 'class', 'struct', or 'union' keyword
FEC00415 ERROR
Невозможно настроить тип '%s'
Cannot instantiate type '%s'
FEC00416 ERROR
Функция-член класса '%s' со спецификатором '= 0' должна быть объявлена как 'virtual'
Member function '%s' declared with pure specifier shall be declared 'virtual'
FEC00417 ERROR
В классе '%s' нет конструктора умолчания
Class '%s' has no default constructor
FEC00418 ERROR
Тип '%s' параметра шаблона '%s' не соответствует фактическому типу '%s'
Type '%s' of template parameter '%s' does not match the actual type '%s'
FEC00419 ERROR
Длина строки исходного текста превышает максимально допустимое значение
Source line length exceeds maximum possible value
FEC00421 ERROR
Необъявленный идентификатор '%s' в прагме 'syscall'
Unknown identifier '%s' in pragma 'syscall'
FEC00422 ERROR
Синтаксическая ошибка в объявлении перед '%s'
Syntax error in declaration before '%s'
FEC00423 ERROR
Синтаксическая ошибка в объявлении члена класса перед '%s'
Syntax error in member declaration before '%s'
FEC00424 ERROR
133
ЮФКВ.30074-01 33 09
Синтаксическая ошибка в ctor-инициализаторе перед '%s'
Syntax error in ctor-initializer before '%s'
FEC00425 ERROR
Синтаксическая ошибка в выражении перед '%s'
Syntax error in expression before '%s'
FEC00426 ERROR
Синтаксическая ошибка в аргументе шаблона перед '%s'
Syntax error in template argument before '%s'
FEC00427 ERROR
Синтаксическая ошибка перед '%s'
Syntax error before '%s'
FEC00428 ERROR
Переполнение стека синтаксического анализатора
Parser stack overflow
FEC00429 ERROR
Неверный объект '%s' в прагме 'syscall'
Invalid object '%s' in pragma 'syscall'
FEC00430 ERROR
Недопустимый тип аргумента '%s' в прагме 'syscall'
Pragma 'syscall' argument of type '%s' is not allowed
FEC00431 ERROR
Была обнаружена синтаксическая ошибка перед '%s', но сейчас компилятор уже в другой
ветви разбора
There was syntax error before '%s' but now compiler is already in another branch of parsing
FEC00436 ERROR
Неизвестный символ '\\%c' в эскейп-последовательности
134
ЮФКВ.30074-01 33 09
Unrecognized character escape symbol '\\%c'
FEC00437 ERROR
Невозможно использовать спецификатор 'friend' в объявлении глобальной функции
преобразования
Global conversion function declared as friend
FEC00438 ERROR
Переменная '%s' из 'условия' должна быть инициализирована
Variable '%s' in condition must be initialized
FEC00446 ERROR
Некорректное использование служебного слова 'export'
Incorrect usage of 'export' keyword
FEC00447 ERROR
Illegal value of non-type template argument %d during instantiation of '%s'
FEC00448 ERROR
Illegal default value of non-type template parameter
FEC00449 ERROR
Illegal argument for a template template parameter %d during instantiation of '%s'
FEC00450 ERROR
Illegal argument for a type template parameter %d during instantiation of '%s'
FEC00501 ERROR
Невозможно открыть заголовочный файл пользователя '%s'
Failed to open user include file '%s'
Заголовочный файл пользователя с таким именем не найден или не моежет быть открыт для
чтения. Проверьте имя файла и пути для поиска заголовочных файлов. Если Вы используете
относительные имена или пути, для поиска заголовочных файлов, проверьте текущий каталог.
Убедитесь, что у Вас есть права доступа к файлу.
FEC00502 ERROR
Невозможно открыть системный заголовочный файл '%s'
135
ЮФКВ.30074-01 33 09
Failed to open system include file '%s'
Системный заголовочный файл с таким именем не найден или не моежет быть открыт для
чтения. Проверьте имя файла и пути для поиска заголовочных файлов. Если Вы используете
относительные имена или пути, для поиска заголовочных файлов, проверьте текущий каталог.
Убедитесь, что у Вас есть права доступа к файлу.
FEC00503 ERROR
Неожиданный конец исходного файла в h-последовательности-символов
Unexpected end of the source file in h-char-sequence
При обрабоке компилятором h-последовательности-символов в дерективе препроцессора
'#include <...>' неожиданно обнаружен конец файла. Проверьте целостность исходного файла.
#include <iostream
FEC00504 ERROR
Недостаточно памяти для malloc()
Not enough memory for malloc()
Внутреняя ошибка компилятора, недостаточно памяти для работы компиялтора. Попробуйте
разделить исходный файл на несколько более маленьких, увеличить размер файла подкачки или
количество физической оперативной памяти. Обратитесь к разработчикам.
FEC00505 ERROR
Повторное объявление '%s' в области действия параметров функции
Multiple declaration of '%s' in parameters scope
Два параметра одной функции не могут иметь одинаковые имена, в не зависимоти от того
имеют они одинаковые типы или разные. Измените имена параметров функции так, что бы они
имели разные имена.
void f(int a, double a);
FEC00506 ERROR
Повторное объявление '%s' в области действия параметров шаблона
Multiple declaration of '%s' in template parameters scope
Два параметра одного шаблона не могут иметь одинаковые имена. Измените имена параметров
шаблона так, что бы они имели разные имена.
template <class T, int T> class C;
136
ЮФКВ.30074-01 33 09
FEC00507 ERROR
Невозможно представить восьмеричное значение '%s'
Cannot represent the octal value of '%s'
Значение восьмеричного целочисленного литерала не представимо как целое число, происходит
переполнение разрядной сетки. Используемое Вами число слишком велико, уменьшите его
значение.
int a = 01000000000000000000000000;
FEC00508 ERROR
Невозможно представить шестнадцатеричное значение '%s'
Cannot represent the hexadecimal value of '%s'
Значение шестнадцатеричного целочисленного литерала не представимо как целое число,
происходит переполнение разрядной сетки. Используемое Вами число слишком велико,
уменьшите его значение.
int a = 0x1000000000000000000000000;
FEC00509 ERROR
Повторное задание метки 'case %ld': предыдущая метка 'case' с тем же значением
находится в файле %s в позиции (%ld, %ld)
Duplicated 'case %ld': another 'case' with the same value is at %s (%ld, %ld)
FEC00510 ERROR
Повторное описание '%s' в пространстве имен '%s'
Redefinition of '%s' in namespace '%s'
Объект не может быть дважды описан дважды в одном пространстве имен, и его имя не может
быть использовано для именования другой сущности из этого же пространства имен. Однако
объявления, не являющиеся описаниями, могут повторятся несколько раз, даже в одном
пространстве имен. Исключением из правила являются функции, для которых разрешено
совместное использование.
namespace A
{
int a;
float a;
};
FEC00511 ERROR
137
ЮФКВ.30074-01 33 09
Повторное объявление '%s' в текущем блоке
Multiple declaration of '%s' in current block
FEC00512 ERROR
Нельзя объявлять массив из ссылок
Cannot declare array of references
FEC00513 ERROR
Нельзя объявлять функцию, возвращающую массив
Cannot declare function returning array
FEC00514 ERROR
Нельзя задавать инициализатор в объявлении деструктора
Cannot specify initializer in destructor declaration
FEC00515 ERROR
Нельзя задавать инициализатор в typedef-объявлении
Cannot specify initializer in typedef declaration
FEC00516 ERROR
Шаблонная функция '%s' в нешаблонном классе не может быть виртуальной
Template function '%s' in non-template class cannot be virtual
FEC00517 ERROR
Нельзя использовать спецификатор 'friend'/'inline'/'virtual' в объявлении параметра
Cannot use 'friend'/'inline'/'virtual' in parameter declaration
FEC00518 ERROR
Нельзя использовать спецификатор friend, inline или virtual в объявлении параметра
шаблона
Cannot use friend, inline, or virtual in template parameter declaration
FEC00519 ERROR
Нельзя использовать спецификатор 'virtual' вне тела класса
138
ЮФКВ.30074-01 33 09
Cannot specify 'virtual' outside class body
FEC00520 ERROR
Нельзя использовать спецификатор 'mutable' вне тела класса
Cannot specify 'mutable' outside class body
FEC00521 ERROR
Нельзя использовать спецификатор 'explicit' вне тела класса
Cannot specify 'explicit' outside class body
FEC00522 ERROR
Спецификатор класса памяти 'extern' нельзя использовать для члена класса
Storage class extern cannot be applied to class member
FEC00523 ERROR
Нельзя объявлять тип внутри операции преобразования типа
Cannot define type inside type conversion
В С++ типы должны быть объявленны в объявлениях, а не в выражениях, однако в С это было
допустимо. В С++ это введено для облегчения обнаружения объявлений в программе. С.1.3
[diff.expr] #2
FEC00524 ERROR
Нельзя объявлять тип в объявлении параметра
Cannot define type in parameter declaration
В С++ нельзя объявлять типы при задании аргументов или возвращаемого значения функций. В
С такие объявления разрешены. Запрет связан с тем, что в С++ реализована именная
эквивалентность типов, а в С структурная. Так как область действия такого объявления является
областью действия парметров функци, то данное объявление не будет видно за пределами
объявления функции. С.1.6 [diff.decl] #2
int f(class A { } a);
FEC00525 ERROR
Нельзя объявлять тип в объявлении параметра шаблона
Cannot define type in template parameter declaration
139
ЮФКВ.30074-01 33 09
Область действия объявления в параметрах шаблона распространяется только на сам шаблон, и
не будет видна за его пределами, поэтому воспользоватся таким объявлением будет
невозможно.
template <struct S {}* ps> class A{};
FEC00526 ERROR
Определение типа не допустимо
Type definition is not allowed
В С++ типы должны быть объявленны в объявлениях, а не в выражениях, однако в С это было
допустимо. В С++ это введено для облегчения обнаружения объявлений в программе. Операция
'new' тоже составная часть выражения, поэтому объявлять типы в операции 'new' также нельзя.
С.1.3 [diff.expr] #2
void* p = new struct S {};
FEC00527 ERROR
Нельзя объявлять тип в приведении, исключении или функции преобразования
Cannot define type casting, exception or conversion function
В С++ типы должны быть объявленны в объявлениях, а не в выражениях, однако в С это было
допустимо. В С++ это введено для облегчения обнаружения объявлений в программе. С.1.3
[diff.expr] #2
void* p = (struct S {}* )0;
FEC00528 ERROR
Синтаксическая ошибка в using-объявлении
Syntax error in 'using' declaration
Неверный синтаксис в 'using'-объявлении. 'using'-объявление должно вводить в текущую область
действия имя из другой области действия. В 'using'-объявление должно быть указано только
имя, а не полное объявлении.
namespace N { class A{}; };
using class N::A; // error
using N::A;
// Ok
FEC00529 ERROR
Синтаксическая ошибка в селекторе члена класса
Syntax error in member selector
140
ЮФКВ.30074-01 33 09
Ошибочный синтаксис в селекторе члена, после селектора должно идти имя члена класса.
Исправьте синтакси селектора.
struct A
{
int a;
};
int f( A& a )
{
return a.int a;
}
FEC00530 ERROR
В перечислителе требуется константное выражение
Constant expression required in enumerator
FEC00531 ERROR
В инициализаторе статического члена класса требуется константное выражение
Constant expression required in static member initializer
FEC00532 ERROR
В фактическом параметре шаблона требуется константное выражение
Constant expression required in actual template parameter
FEC00533 ERROR
В метке 'case' требуется константное выражение
Constant expression required in 'case' label
FEC00534 ERROR
Для указания размера битового поля требуется константное выражение
Constant expression required in bit field
FEC00535 ERROR
Конструктор не может возвращать значение
Constructor cannot return a value
FEC00536 ERROR
141
ЮФКВ.30074-01 33 09
Деструктор не может возвращать значение
Destructor cannot return a value
FEC00537 ERROR
Недопустимый тип '%s' анонимного параметра шаблона
Illegal type '%s' of unnamed template parameter
FEC00538 ERROR
Невозможно найти конструктор умолчания в '%s'
Cannot find a default constructor in '%s'
FEC00539 ERROR
Операция '%s' описана вне класса
Operator '%s' defined outside a class
FEC00540 ERROR
'%s' должна быть объявлена с %d параметром(параметрами)
'%s' must be declared with with %d parameter(s)
FEC00541 ERROR
'%s' должна быть объявлена с %d или с %d параметром(параметрами)
'%s' must be declared with %d or %d parameter(s)
FEC00542 ERROR
'%s' должна быть объявлена по крайней мере с %d параметром(параметрами)
'%s' must be declared with at least %d parameter(s)
FEC00543 ERROR
'%s()' должна возвращать (указатель на, ссылку на) класс
'%s()' must return (pointer to, reference to) a class
FEC00544 ERROR
Слишком много параметров для настройки шаблона '%s'
Extra parameters in template instantiation '%s'
142
ЮФКВ.30074-01 33 09
FEC00545 ERROR
Объединение не может иметь базовый класс
Union cannot have a base class
FEC00546 ERROR
Параметр для '%s' должен иметь классовый тип, так как он используется в ctorинициализаторе
Actual parameter for '%s' must be a class type because it is used in a ctor-initializer
FEC00547 ERROR
Параметр для '%s' должен быть объектом с внешним связыванием
Actual parameter for '%s' must be an object with external linkage
FEC00548 ERROR
Параметр %d для '%s' должен быть объектом с внешним связыванием
Actual parameter %d for '%s' must be an object with external linkage
FEC00549 ERROR
Параметр %d для '%s' должен быть типом
Actual parameter %d for '%s' must be a type
FEC00550 ERROR
Параметр %d для '%s' должен быть константным выражением
Actual parameter %d for '%s' must be a constant expression
FEC00551 ERROR
Невозможно описать объект абстрактного типа '%s'
Cannot define object of abstract type '%s'
FEC00552 ERROR
Невозможно создать объект абстрактного типа '%s'
Cannot create object of abstract type '%s'
FEC00553 ERROR
143
ЮФКВ.30074-01 33 09
Невозможно применить 'sizeof' к абстрактному типу или объекту абстрактного типа '%s'
Cannot apply 'sizeof' to type or object of abstract type '%s'
FEC00554 ERROR
Невозможно объявить объект неполного типа '%s'
Cannot declare object of incomplete type '%s'
FEC00555 ERROR
Невозможно описать объект неполного типа '%s'
Cannot define object of incomplete type '%s'
FEC00556 ERROR
Невозможно создать объект неполного типа '%s'
Cannot create object of incomplete type '%s'
FEC00557 ERROR
Невозможно применить 'sizeof' к неполному типу или объекту неполного типа '%s'
Cannot apply 'sizeof' to type or object of incomplete type '%s'
FEC00558 ERROR
Невозможно оперировать с объектом неполного типа '%s'
Cannot operate with an object of incomplete type '%s'
FEC00559 ERROR
Обращение к деструктору из using-объявления невозможно
'using' declaration cannot refer to a destructor
FEC00560 ERROR
Функция-член '%s' должна быть объявлена с %d параметром(параметрами)
Member function '%s' must be declared with %d parameter(s)
FEC00561 ERROR
Функция-член '%s' должна быть объявлена с %d или с %d параметром(параметрами)
Member function '%s' must be declared with %d or %d parameter(s)
144
ЮФКВ.30074-01 33 09
FEC00562 ERROR
Функция-член '%s' должна быть объявлена по крайней мере с %d
параметром(параметрами)
Member function '%s' must be declared with at least %d parameter(s)
FEC00563 ERROR
Нельзя использовать 'typedef' в заголовке описания функции
Cannot specify 'typedef' in function definition
FEC00564 ERROR
Невозможно описать функцию-член '%s' вне вложенного класса
Cannot define member function '%s' outside nested class
FEC00565 ERROR
Невозможно описать функцию-член '%s' вне локального класса
Cannot define member function '%s' outside local class
FEC00566 ERROR
Значение case-метки должно быть целочисленной константой
'case' value must be an integer constant
FEC00567 ERROR
Размер массива должен быть целочисленной константой
Array size must be an integer constant
FEC00568 ERROR
Размер битового поля должен быть целочисленной константой
Bit field size must be an integer constant
FEC00569 ERROR
Невозможно использовать нетиповой параметр шаблона '%s' в квалификации
Cannot use non-type template parameter '%s' in qualification
FEC00570 ERROR
145
ЮФКВ.30074-01 33 09
Тип '%s' в квалификации - не класс, а '%s'
Type '%s' in qualification is not a class but '%s'
FEC00571 ERROR
Квалификация обозначает не-тип '%s'
Qualification denotes a non-type '%s'
FEC00572 ERROR
Объединение не может содержать члены типа '%s', так как у этого типа есть конструктор
умолчания
Union cannot have member of type '%s' because of default constructor
FEC00573 ERROR
Объединение не может содержать члены типа '%s', так как у этого типа есть конструктор
копирования
Union cannot have member of type '%s' because of copy constructor
FEC00574 ERROR
Объединение не может содержать члены типа '%s', так как у этого типа есть операция
присваивания
Union cannot have member of type '%s' because of default assignment operator
FEC00575 ERROR
Объединение не может содержать члены типа '%s', так как у этого типа есть деструктор
Union cannot have member of type '%s' because of destructor
FEC00576 ERROR
Невозможно скопировать конструктором копирования '%s' r-значение типа '%s'
Copy constructor '%s' cannot copy r-value of type '%s'
FEC00577 ERROR
Недопустимый указатель на член класса типа 'void'
Illegal pointer to member of 'void' type
FEC00578 ERROR
146
ЮФКВ.30074-01 33 09
Конструктор не может быть задан со спецификатором 'const' или 'volatile'
Constructor cannot be 'const' or 'volatile'
FEC00579 ERROR
Деструктор не может быть задан со спецификатором 'const' или 'volatile'
Destructor cannot be 'const' or 'volatile'
Деструктор не может быть объявлен как 'const' или 'volatile', так как семантика 'const' или
'volatile' не может быть применена к объекту во время его разрушения (7.1.5.1). 12.4 [2] ... A
destructor shall not be declared 'const', 'volatile' or 'const volatile'(9.3.2) ...
class A
{
public:
~A() const {}
};
FEC00580 ERROR
Не указано значение по умолчанию для параметра шаблона '%s'
Missing default value for template parameter '%s'
FEC00581 ERROR
Не указано значение по умолчанию для параметра шаблона '%s', заданного %d-м
Missing default value for template parameter '%s' with number %d
FEC00582 ERROR
Нельзя использовать спецификаторы 'auto' или 'register' во внешнем объявлении
auto or register cannot be used in external declaration
FEC00583 ERROR
Объект '%s' неполного типа не может быть объявлен как 'static', 'auto' или 'register'
Object '%s' of incomplete type cannot be declared static, auto, or register
В объявлении массива не указана размерность, это допустимо только для объявления массивов
из других модулей. Укажите размерность массива или объявите его как 'extern'.
static int a[];
FEC00584 ERROR
147
ЮФКВ.30074-01 33 09
Невозможно вызвать конструктор '%s' с помощью селектора
Cannot call constructor '%s' in selector
FEC00585 ERROR
Использование спецификатора '=0' для функции '%s', не являющейся членом класса, не
допускается
Cannot use pure specifier '=0' for non-member function '%s'
FEC00586 ERROR
Необъявленная функция-операция '%s'
Undeclared operator function '%s'
FEC00587 ERROR
Невозможно объявить функцию-член класса без спецификатора
Cannot declare member function without a specifier
FEC00588 ERROR
Нельзя использовать 'static'/'extern' в спецификаторах типа в объявлении 'using'
Cannot specify 'static'/'extern' in type specifiers in 'using'
FEC00589 ERROR
Нельзя использовать 'static'/'extern' в type-id
Cannot specify 'static'/'extern' in type-id
FEC00590 ERROR
Нельзя использовать 'static'/'extern' в имени функции преобразования
Cannot specify 'static'/'extern' in conversion function name
FEC00591 ERROR
Нельзя использовать 'static'/'extern' в объявлении исключительной ситуации
Cannot specify 'static'/'extern' in exception declaration
FEC00592 ERROR
Нельзя использовать 'static'/'extern' в выражении 'new'
148
ЮФКВ.30074-01 33 09
Cannot specify 'static'/'extern' in 'new' expression
FEC00593 ERROR
Нельзя использовать 'static'/'extern' в операции '.'
Cannot specify 'static'/'extern' in '.' operator
FEC00594 ERROR
Нельзя использовать 'static'/'extern' в операции '->'
Cannot specify 'static'/'extern' in '->' operator
FEC00595 ERROR
Нельзя использовать 'typedef' в спецификаторах типа в объявлении 'using'
Cannot specify 'typedef' in type specifiers in 'using'
FEC00596 ERROR
Нельзя использовать 'typedef' в type-id
Cannot specify 'typedef' in type-id
FEC00597 ERROR
Нельзя использовать 'typedef' в имени функции преобразования
Cannot specify 'typedef' in conversion function name
FEC00598 ERROR
Нельзя использовать 'typedef' в объявлении исключительной ситуации
Cannot specify 'typedef' in exception declaration
FEC00599 ERROR
Нельзя использовать 'typedef' в выражении 'new'
Cannot specify 'typedef' in 'new' expression
FEC00600 ERROR
Нельзя использовать 'typedef' в операции '.'
Cannot specify 'typedef' in '.' operator
FEC00601 ERROR
149
ЮФКВ.30074-01 33 09
Нельзя использовать 'typedef' в операции '->'
Cannot specify 'typedef' in '->' operator
FEC00602 ERROR
Нельзя использовать 'friend'/'inline'/'virtual' в спецификаторах типа в объявлении 'using'
Cannot specify 'friend'/'inline'/'virtual' in type specifiers in 'using'
FEC00603 ERROR
Нельзя использовать 'friend'/'inline'/'virtual' в type-id
Cannot specify 'friend'/'inline'/'virtual' in type-id
FEC00604 ERROR
Нельзя использовать 'friend'/'inline'/'virtual' в имени функции преобразования
Cannot specify 'friend'/'inline'/'virtual' in conversion function name
FEC00605 ERROR
Нельзя использовать 'friend'/'inline'/'virtual' в объявлении исключительной ситуации
Cannot specify 'friend'/'inline'/'virtual' in exception declaration
FEC00606 ERROR
Нельзя использовать 'friend'/'inline'/'virtual' в выражении 'new'
Cannot specify 'friend'/'inline'/'virtual' in 'new' expression
FEC00607 ERROR
Нельзя использовать 'friend'/'inline'/'virtual' в операции '.'
Cannot specify 'friend'/'inline'/'virtual' in '.' operator
FEC00608 ERROR
Нельзя использовать 'friend'/'inline'/'virtual' в операции '->'
Cannot specify 'friend'/'inline'/'virtual' in '->' operator
FEC00609 ERROR
Неверный тип '%s' параметра шаблона '%s'
Illegal type '%s' of template parameter '%s'
150
ЮФКВ.30074-01 33 09
FEC00610 ERROR
Неверный тип '%s' безымянного параметра шаблона
Illegal type '%s' of unnamed template parameter
FEC00611 ERROR
Невозможно настроить шаблон функции '%s'
Cannot instantiate function template '%s'
template<class T>
T test()
{
T t = T(1);
return t;
}
void h()
{
int j = test();
// ERROR!
int i = test<int>(); // OK!
}
FEC00612 ERROR
Слишком большая рекурсия (%d) при настройке шаблона '%s'
Too large recursion (%d) on template instantiation for '%s'
FEC00613 ERROR
Пока шаблоны в шаблонах классов не реализованы: '%s'
Templates in class templates are not yet implemented: '%s'
FEC00614 ERROR
Невозможно использовать ненастроенный шаблон '%s'
Cannot use template '%s' without instantiating
FEC00615 ERROR
Повторное объявление '%s' в операторе 'for'
Multiple declaration of '%s' in 'for' statement
FEC00616 ERROR
151
ЮФКВ.30074-01 33 09
Повторное объявление '%s' в операторе 'if'
Multiple declaration of '%s' in 'if' statement
FEC00617 ERROR
Повторное объявление '%s' в операторе 'switch'
Multiple declaration of '%s' in 'switch' statement
FEC00618 ERROR
Повторное объявление '%s' в операторе 'while'
Multiple declaration of '%s' in 'while' statement
FEC00619 ERROR
Невозможно создать неопределенное значение типа '%s'
Cannot create undefined value of type '%s'
FEC00620 ERROR
В '%s' неоднозначные виртуальные функции '%s' и '%s'
In '%s' ambiguity virtual function '%s' and '%s'
FEC00621 ERROR
Использование оператора 'typeid' без полного описания класса 'std::type_info' невозможно
Cannot use 'typeid' operator without complete definition of class 'std::type_info'
FEC00622 ERROR
Неоднозначные частичные специализации '%s' и '%s'
Ambiguous partial specialization '%s' and '%s'
FEC00623 ERROR
Явная настройка: '%s' должна быть специализацией шаблонного класса
Explicit instantiation: '%s' must be a template-class specialization
FEC00624 ERROR
Неизвестный шаблон '%s' в явной настройке
Unknown template '%s' in explicit instantiation
152
ЮФКВ.30074-01 33 09
FEC00625 ERROR
В явной настройке задано объявление не шаблона, а '%s'
Not a template in explicit instantiation but '%s'
FEC00626 ERROR
Использование спецификатор памяти 'static' не разрешено здесь
Storage class 'static' is not allowed here
FEC00627 ERROR
Функциональный стиль преобразования к '%s' не может принимать более одного
параметра
Function-style conversion to '%s' cannot take more than one argument
FEC00628 ERROR
Тип возвращаемого значения для 'operator->' не должен быть типом содержащего класса
The return type for the 'operator->' must not be the containing class
FEC00629 ERROR
На тип '%s' нельзя ссылаться
Cannot refer to type name '%s'
FEC00630 ERROR
Нельзя войти в блок-с-контролем посредством оператора перехода
Goto statement cannot transfer control into try-block
FEC00631 ERROR
Нельзя войти в обработчик исключения посредством оператора перехода
Goto statement cannot transfer control into catch-handler
FEC00632 ERROR
Невозможно объявить параметр абстрактного классового типа '%s'
Cannot declare parameter of abstract type '%s'
FEC00633 ERROR
153
ЮФКВ.30074-01 33 09
Функция '%s' в данной точке невидима
Function '%s' is invisible at this point
FEC00634 ERROR
В typedef-объявлениях нельзя задавать функциональный тип со спецификациейисключений
Exception-specification shall not appear in a typedef declaration
В typedef-объявлениях нельзя задавать функциональный тип со спецификацией-исключений; см.
Стандарт, разд 15.4, #1.
FEC00635 ERROR
Параметр для шаблона должен быть объектом с внешним связыванием
Actual parameter for template must be an object with external linkage
FEC00636 ERROR
Неполный тип '%s' параметра в описании функции '%s'
Parameter of incomplete type '%s' in function definition '%s'
FEC00637 ERROR
Неполный тип '%s' в качестве типа результата в описании функции '%s'
Incomplete type '%s' as a result type in function definition '%s'
FEC00638 ERROR
Лишние параметры в повторном объявлении шаблона '%s'
Extra template parameters in redeclaration of template '%s'
FEC00639 ERROR
Недостаточно параметров в повторном объявлении шаблона '%s'
Missing template parameters in redeclaration of template '%s'
FEC00640 ERROR
Несовпадающие виды параметра %d в повторном объявлении шаблона '%s'
Different kinds of template parameter %d in redeclaration of template '%s'
FEC00641 ERROR
154
ЮФКВ.30074-01 33 09
несовпадающие типы параметра %d в повторном объявлении шаблона '%s'
Different types in parameter %d in redeclaration of template '%s'
FEC00642 ERROR
Пропущен тип по умолчанию для типового параметра '%s' в повторном объявлении
шаблона '%s'
Missing default type for template parameter '%s' in redeclaration of template '%s'
FEC00643 ERROR
Пропущен тип по умолчанию для неименованного типового параметра %d в повторном
объявлении шаблона '%s'
Missing default type for unnamed template parameter %d in redeclaration of template '%s'
FEC00644 ERROR
Повторное задание типа по умолчанию для типового параметра %d в повторном
объявлении шаблона '%s'
Duplicated default type for template parameter %d in redeclaration of template '%s'
FEC00645 ERROR
Пропущено значение по умолчанию для нетипового параметра '%s' в повторном
объявлении шаблона '%s'
Missing default value for template parameter '%s' in redeclaration of template '%s'
FEC00646 ERROR
Пропущено значение по умолчанию для неименованного нетипового параметра %d в
повторном объявлении шаблона '%s'
Missing default value for unnamed template parameter %d in redeclaration of template '%s'
FEC00647 ERROR
Повторное задание значения по умолчанию для нетипового параметра %d в повторном
объявлении шаблона '%s'
Duplicated default value for template parameter %d in redeclaration of template '%s'
FEC00648 ERROR
Деструктор '%s' не может быть шаблоном
Destructor '%s' shall not be a template
155
ЮФКВ.30074-01 33 09
FEC00649 ERROR
В данном контексте нельзя описывать объект или функцию '%s', объявленную в '%s'
Cannot define object or function '%s' declared in '%s' in this context
FEC00650 ERROR
В данном контексте нужно использовать служебное слово 'typename'
Use of 'typename' keyword required
FEC00651 ERROR
В явной специализации шаблона должно быть использовано имя шаблона
Template-id must be used in explicit specialization
FEC00652 ERROR
Имя параметра шаблона '%s' не должно совпадать с именем самого шаблона
Template parameter '%s' cannot have the same name as the template name
Раздел 14.6.1: A template parameter shall not be redeclared within its scope (including nested scopes).
A template parameter shall not have the same name as the template name.
FEC00653 ERROR
Нельзя объявлять объект или функцию, имя которой совпадает с именем параметра
шаблона '%s'
Cannot redeclare template parameter '%s' within its scope
Раздел 14.6.1: A template parameter shall not be redeclared within its scope (including nested scopes).
A template parameter shall not have the same name as the template name.
FEC00654 ERROR
Нельзя задавать тип по умолчанию для параметра '%s' шаблона функции
Cannot specify default type for function template parameter '%s'
Раздел 14.1, #9
FEC00655 ERROR
Нельзя задавать значение по умолчанию для параметра '%s' шаблона функции
Cannot specify default value for function template parameter '%s'
156
ЮФКВ.30074-01 33 09
Раздел 14.1, #9
FEC00656 ERROR
В объявлении объекта или типа '%s' нельзя повторно использовать имя шаблона
Cannot use template name '%s' in object/typedef declaration
Раздел 14.1, #5
FEC00657 ERROR
Нельзя объявлять шаблон с именем '%s', так как оно уже использовано в '%s'
Cannot declare template with name '%s' because it is already used in '%s'
Глава 14, #5
FEC00658 ERROR
Не указано значение по умолчанию для параметра шаблона '%s', заданного %d-м
Missing default type for template parameter '%s' with number %d
FEC00659 ERROR
Не указано значение по умолчанию для параметра шаблона '%s', заданного %d-м
Missing default type for template parameter '%s' with number %d
FEC00660 ERROR
В объявлении функции '%s' нельзя повторно использовать имя шаблона
Cannot use template name '%s' in function declaration
Глава 14, #5
FEC00661 ERROR
Нельзя повторно использовать имя шаблона '%s' в качестве имени перечислителя
Cannot use template name '%s' as enumerator
Глава 14, #5
FEC00662 ERROR
В объявлении явной специализации '%s' необходим заголовок 'template<>'
Template header 'template<>' missed in explicit specialization '%s'
157
ЮФКВ.30074-01 33 09
FEC00663 ERROR
В данной реализации не рекомендуется использовать идентификаторы, содержащие '__'
Identifiers containing '__' sequence should be avoided by user in this implementation
2.10, #2
FEC00664 ERROR
Типовой аргумент шаблона '%s' образован из неименованного типа
Cannot use unnamed type '%s' in template type argument
14.3.1, #2
FEC00665 ERROR
Типовой аргумент шаблона '%s' представляет собой неименованный тип
Cannot use unnamed type '%s' as template type argument
14.3.1, #2
FEC00666 ERROR
Типовой аргумент шаблона '%s' образован из локального типа
Cannot use local type '%s' in template type argument
14.3.1, #2
FEC00667 ERROR
Типовой аргумент шаблона '%s' представляет собой локальный тип
Cannot use local type '%s' as template type argument
14.3.1, #2
FEC00668 ERROR
В явной специализации шаблона '%s' нельзя объявлять объект(ы)
Cannot declare object(s) in explicit template specialization '%s'
14, #3
FEC00669 ERROR
В явной настройке шаблона '%s' нельзя объявлять объект(ы)
158
ЮФКВ.30074-01 33 09
Cannot declare object(s) in explicit template instantiation '%s'
14, #3
FEC00670 ERROR
В объявлении шаблона '%s' нельзя объявлять объект(ы)
Cannot declare object(s) in template declaration of '%s'
14, #3
FEC00671 ERROR
В явной настройке шаблона '%s' не задаются формальные параметры (требуется
template<>)
Cannot specify template parameters in explicit instantiation '%s' (template<> required)
FEC00672 ERROR
Нельзя использовать квалифицированное имя '%s' в качестве базового класса без
служебного слова typename
Cannot use qualified name '%s' as a base class without 'typename' keyword
FEC00673 ERROR
Сущность '%s' в ctor-инициализаторе '%s' не является ни базой, ни членом класса
Entity '%s' in ctor-initializer for '%s' is neither a direct base class nor a class member
FEC00674 ERROR
В данной позиции ожидается идентификатор
Identifier expected
FEC00675 ERROR
В теле шаблона объявлено слишком много объектов
Too many objects declared in template body
FEC00676 ERROR
Нельзя описывать специализации шаблона '%s' в этой области действия
Unable to define template specialization '%s' within this scope
Специализации шаблона можно описывать только в той же области действия, что и сам шаблон.
159
ЮФКВ.30074-01 33 09
FEC00677 ERROR
Преобразование со снятием контстантности для аргумента this при вызове '%s'
Cannot cast away the constness of 'this' argument in the call of '%s'
FEC00678 ERROR
Операция '%s' недопустима для объектов типа '%s'
Cannot apply '%s' operator for objects of type '%s'
FEC00679 ERROR
Спецификатор 'template' недопустим в using-объявлении
Cannot use 'template' specifier in using-declaration
FEC00680 ERROR
'%s' содержит недопустимый безразмерный массив
'%s' has an illegal zero-sized array
FEC00681 ERROR
Массивы объектов, содержащих безразмерные массивы, недопустимы
Arrays of objects containing zero-size arrays are illegal
FEC00682 ERROR
Базовые классы не могут содержать безразмерные массивы
Base classes cannot contain zero-sized arrays
FEC00683 ERROR
%s уже имеет объявление, не согласующееся с данным
%s has a conflicting declaration
FEC00684 ERROR
В объявлении дружественного класса необходимо использовать class, struct или union
The friend declaration must be an elaborated class name
FEC00685 ERROR
160
ЮФКВ.30074-01 33 09
Переменная - член класса, инициализируемая в описании класса, должна иметь атрибут
'const'
A member variable must have the 'const' attribute to be initialized in the definition of a class
FEC00686 ERROR
Неверное значение по умолчанию для типового параметра шаблона
Illegal template type parameter default value
FEC00687 ERROR
%s - не шаблон
%s isn't a template
FEC00688 ERROR
Нестандартная форма взятия адреса функции-члена '%s'
Nonstandard form for taking the address of a member function '%s'
FEC00689 ERROR
Частичная специализация внутреннего шаблонного класса '%s' должна быть объявлена в
классе, членом которого он является
A partial specialization of a member class template '%s' must be declared in the class of which it
is a member
FEC00690 ERROR
Для явной специализация '%s' нет подходящего шаблона
The explicit template specialization '%s' doesn't match any template
FEC00691 ERROR
'%s' является срециализацией для нескольких шаблонов
The explicit template specialization '%s' matches more then one template
FEC00692 ERROR
В явной специализации нельзя использовать аргументы по умолчанию
Default arguments are not allowed in explicit specializations
FEC00693 ERROR
161
ЮФКВ.30074-01 33 09
Служебное слово typename не разрешается использовать в спецификациях базовых
классов и в ctor-инициализаторах
The keyword typename is not permitted in a base specifier or in a ctor-initializer
FEC00694 ERROR
Преобразование между несовместимыми типами из %s в %s
Conversion between incompatible types from %s to %s
FEC00695 ERROR
Не существует шаблонного класса, соответствующего %s
No existing template matches %s
FEC00696 ERROR
Лишний заголовок шаблона
Extra template prefixes
FEC00697 ERROR
Не удалось вывести параметры шаблона при вызове '%s'
Template parameters deduction failed in call to '%s'
FEC00698 ERROR
Связывание, указаанное в объявлении '%s', несовместимо с указанным ранее
Linkage specification is incompatible with previous one in declaration of '%s'
FEC00699 ERROR
'%s' не может быть определен в текущей области
'%s' cannot be defined in the current scope
FEC00700 ERROR
Непосредственное обращение к конструктору возможно только при его объявлении: '%s'
Cannot use a constructor except in declaration: '%s'
FEC00701 ERROR
В определении функции '%s' отсутствует имя параметра
162
ЮФКВ.30074-01 33 09
Parameter name missing in definition of function '%s'
FEC00702 ERROR
Повторное определение статического члена класса '%s'
Multiple definition of a static class member '%s'
FEC00703 ERROR
пустое перечисление недопустимо:'%s'
empty enumeration isn't allowed: '%s'
FEC00704 ERROR
виртуальная функция '%s' неоднозначно переопределяется функциями '%s' и '%s'
virtual function '%s' is ambiguously overrided by '%s' and '%s'
FEC00705 ERROR
виртуальная функция '%s' неоднозначно переопределяется функцией '%s'
virtual function '%s' is ambiguously overrided by '%s'
FEC00706 ERROR
явная специализация шаблонного класса внутри шаблона не разрешена
explicit specialization of class template inside a template isn't allowed
FEC00707 ERROR
оператор преобразования должен быть членом класса
conversion function must be a class member
FEC00708 ERROR
невозможно определить лучшую функцию среди следующих кандидатов: %s
unable to find the best candidate function among the following ones: %s
FEC00709 ERROR
скрытый аргумент вызова не может быть преобразован к скрытому параметру функции
'%s'
implied object argument of the call doesn't match implicit object parameter of '%s'
163
ЮФКВ.30074-01 33 09
FEC00710 ERROR
не найдена подходящая функция для friend-объявления'
matching function not found for friend declaration'
FEC00711 ERROR
частичная специализация в объявлении дружественного класса не разрешена
partial specialization in friend class declaration isn't allowed
FEC00712 ERROR
вызов необъявленной функции '%s'
call of a function without declaration: '%s'
FEC00713 ERROR
зацикливание последовательности операторов ->
loop in sequence of 'operator ->' functions
FEC00714 ERROR
конфликт внутреннего.внешнего связывания с предыдущим объявлением
external/internal linkage conflict with previous declaration
FEC00715 ERROR
объявление функции преобразования типа не может содержать тип возврата
return type cannot be specified in conversion function declaration
FEC00716 ERROR
член класса '%s', на который ссылается using-объявление, должен быть виден в одном из
прямых базовых классов
class member '%s' designated by a using-declaration must be visible in a direct base class
FEC00717 ERROR
функция '%s' конфликтует с using-объявлением функции '%s'
function '%s' conflicts with using-declaration of function '%s'
FEC00718 ERROR
164
ЮФКВ.30074-01 33 09
using-объявление функции '%s' конфликтует с функцией '%s'
using-declaration of function '%s' conflicts with function '%s'
FEC00719 ERROR
повторное объявление '%s' с другим кодом доступа
redeclaration of '%s' changes its access code
FEC00720 ERROR
инициализатор при явной настройке недопустим
initializer is not allowed with an explicit instantiation
FEC00721 ERROR
специализация, которая уже была настроена, не может быть объявлена как явная
специализация
specialization which has been already instantiated cannot be declared as explicit specialization
FEC00722 ERROR
список идентификаторов на месте параметров может использоваться только в
определении функции
identifier-list parameters may only be used in a function definition
FEC00723 ERROR
тип %s не может содержать значение типа %s
type %s is not large enough to hold a value of type %s
FEC00724 ERROR
функция не может быть объявлена со спецификатором 'mutable'
Function must not be declared as 'mutable'
FEC00725 ERROR
функция не может быть членом структуры
Function may not be a member of a structure
FEC00726 ERROR
Член структуры не может быть объявлен со спецификатором 'auto', 'register' или 'static'
165
ЮФКВ.30074-01 33 09
Structure member cannot be declared 'auto', 'register', or 'static'
FEC00727 ERROR
Виртуальная функция %s не может быть статической
Virtual function %s may not be static
FEC00728 ERROR
Для обозначения конструктора или деструктора должно использоваться имя его класса
Constructor or destructor must be referenced by its class' name
FEC00729 ERROR
Квалификатор в деклараторе указателя на член не именует класс
Nested name specifier in a pointer to member declarator doesn't name a class
FEC00730 ERROR
Идентификатор после 'template' должен именовать шаблон - член класса
name following 'template' must be a member template
FEC00731 ERROR
Неправильный десигнатор
illegal designator
FEC00732 ERROR
Недопустимый тип %s в составном литерале
Illegal type %s in compound literal
FEC00733 ERROR
Инициализация безразмерного массива в данном контексте недопустима
Unsized array initialization illegal in this context
FEC00734 ERROR
между '\\' и переводом строки есть пробелы
backslash and newline separated by space
FEC00735 ERROR
166
ЮФКВ.30074-01 33 09
вложенная функция объявдена как 'extern'
nested function declared as 'extern'
FEC00736 ERROR
явная специализация шаблона должна быть объявлена в пространстве имен, содержащем
шаблон
template explicit specialization must be first declared in the namespace containing the template
FEC00737 ERROR
циклическая подстановка аргумента функции по умолчанию
cyclic use of function argument default
FEC00738 ERROR
переменная в результате настройки получила функциональный тип: '%s'
variable '%s' has functional type as a result of instantiation
FEC00739 ERROR
#pragma dsp разрешена только на глобальном уровне или в пространстве имен
#pragma dsp is only allowed in global or namespace scope
FEC00740 ERROR
#pragma dsp содержит идентификатор %s, который уже определён
#pragma dsp contains identifier %s which is already defined
FEC00741 ERROR
RISC-переменная имеет тип DSP-класса %s
variables in RISC space cannot designate DSP class objects (%s)
FEC00742 ERROR
Сущность %s из RISC нельзя использовать в коде для DSP
RISC entity %s cannot be used in DSP mode
FEC00743 ERROR
Базовый класс %s относится к другой платформе
167
ЮФКВ.30074-01 33 09
Base class %s belongs to another platform
FEC00744 ERROR
Квалификатор restrict применяется только к указателю
rectrict qualifier only applies to pointers
FEC00745 ERROR
static или квалификаторы типа здесь не разрешены
static or type qualifiers are not allowed here
FEC00746 ERROR
Квалификаторы типа и static в индексе массива могут употребляться только в объявлении
параметра функции и только в наиболее внешнем индексе
Type qualifiers and the keyword static inside array index shall appear only in a declaration of a
function parameter with an array type, and then only in the outermost array type derivation
FEC00747 ERROR
* внутри квадратных скобок в деклараторе массива недопустима
* may not appear inside square brackets in array declarator
FEC00748 ERROR
тип переменного размера допустим только на уровне блока или прототипа функции
variably modified type is allowed only at block or function prototype scope
FEC00749 ERROR
объекты, объявленные как 'extern', не могут иметь тип переменного размера
'extern' objects cannot have a variably modified type
FEC00750 ERROR
массивы переменного размера не могут быть статическими
variable length arrays cannot be static
FEC00751 ERROR
выражение для размера массива должно иметь целый тип
array size expression must have an integer type
168
ЮФКВ.30074-01 33 09
FEC00752 ERROR
* внутри квадратных скобок в деклараторе массива допустима только в прототипе
функции
* may appear inside square brackets in array declarator only in function prototype
FEC00753 ERROR
массив переменной длины нельзя инициализировать
variable length array cannot be initialized
FEC00754 ERROR
массив переменной длины в составном литерале недопустим
variable length array in a compound literal is not allowed
FEC00755 ERROR
'_Imaginary' - зарезервированное слово
Identifier '_Imaginary' is reserved
FEC00756 ERROR
cv-квалификаторы не могут применяться к функциональному типу
cv-qualifiers cannot be applied to a function type
FEC00757 ERROR
неправильное использование модификаторов функции
illegal use of function modifiers
FEC00758 ERROR
неправильное использование модификатора __closure
illegal use of __closure modifier
FEC00759 ERROR
неверное объявление __property
illegal property declaration
FEC00760 ERROR
169
ЮФКВ.30074-01 33 09
неверное использование __property
illegal use of property
FEC00761 ERROR
неверная система типов
illegal type system
FEC00762 ERROR
неверный оператор __uuidof
illegal __uuidof operator
FEC00763 ERROR
неверный оператор __classid
illegal __classid operator
FEC00764 ERROR
%s: другой класс памяти при переопределении
%s: redefinition; different storage class
FEC00765 ERROR
неверный спецификатор __declspec
illegal __declspec specifier
FEC00766 ERROR
разные модификаторы типа при переопределении '%s'
'%s' redefinition: different type modifiers
FEC00767 ERROR
требуется целочисленное константное выражение
integral constant expression required
FEC01000 ERROR
Неверное имя директивы
Invalid directive name
170
ЮФКВ.30074-01 33 09
FEC01001 ERROR
Неожиданный конец файла в теле директивы препроцессора
Unexpected end-of-file in preprocessing directive
FEC01002 ERROR
Пропущена директива #endif
Missing #endif directive
FEC01003 ERROR
#elif без #if
#elif without #if
FEC01004 ERROR
#elif после #else
#elif after #else
FEC01005 ERROR
#else без #if
#else without #if
FEC01006 ERROR
#else после #else
#else after #else
FEC01007 ERROR
#endif без #if
#endif without matching #if
FEC01008 ERROR
Пропущено имя директивы
Missing directive name
FEC01009 ERROR
Неверное использование оператора 'defined'
171
ЮФКВ.30074-01 33 09
Invalid usage of 'defined' operator
FEC01010 ERROR
Синтаксическая ошибка в директиве #ifdef или #ifndef: ожидается идентификатор
Syntax error in #ifdef or #ifndef: identifier expected
FEC01011 ERROR
Данная форма директивы #include не поддерживается
Given form of #include is not yet supported
Теперь эта диагностика никогда не выводится. Ошибочные ситуации после #include
диагностируются сообщением 1043.
FEC01012 ERROR
Синтаксическая ошибка в директиве #define: ожидается идентификатор
Syntax error in #define: identifier expected
FEC01013 ERROR
Невозможно переопределить макрос без параметров макросом с параметрами и наоборот
Unable to redefine object-like macro to function-like and vice versa
FEC01014 ERROR
Синтаксическая ошибка в директиве #undef: ожидается идентификатор
Syntax error in #undef: identifier expected
FEC01015 ERROR
Синтаксическая ошибка в прагме syscall: первым аргументом должен быть
идентификатор dll или vm
Syntax error in pragma syscall: the first argument must be an identifier 'dll' or 'vm'
FEC01016 ERROR
Синтаксическая ошибка в списке аргументов прагмы: ожидается '%c'
Syntax error in pragma argument list: '%c' expected
FEC01017 ERROR
Синтаксическая ошибка в прагме syscall: вторым аргументом должен строковый литерал
172
ЮФКВ.30074-01 33 09
Syntax error in pragma syscall: the second argument must be a string literal
FEC01018 ERROR
Синтаксическая ошибка в прагме syscall: должно быть указано имя функции из DLL или
ее ордината
Syntax error in pragma syscall: DLL function name or DLL function ordinate must be specified
FEC01019 ERROR
Синтаксическая ошибка в прагме syscall: должно быть указано имя функции из DLL или
ее ордината
Syntax error in pragma syscall: calling conventions must be specified
FEC01020 ERROR
Поддерживается только соглашение о вызовах stdcall
Only 'stdcall' calling conventions are supported
FEC01021 ERROR
Синтаксическая ошибка в прагме syscall: должно быть указано имя переменной
Syntax error in pragma syscall: variable name must be specified
FEC01022 ERROR
Неизвестная прагма
Unknown pragma
FEC01023 ERROR
Неожиданные символы в теле директивы препроцессора
Garbage in preprocessing directive
FEC01024 ERROR
Синтаксическая ошибка в константном выражении препроцессора
Syntax error in preprocessor constant expression
FEC01025 ERROR
Синтаксическая ошибка в константном выражении препроцессора: ожидается '%c'
Syntax error in preprocessor constant expression: '%c' expected
173
ЮФКВ.30074-01 33 09
FEC01026 ERROR
Ключевое слово в константном выражении препроцессора
Keyword in preprocessor constant expression
FEC01027 ERROR
Нестандартное поведение: пустой аргумент макроса с параметрами
Non-standard: an empty function-like macro argument
FEC01028 ERROR
Невозможно переопределить макрос без параметров макросом с другой заменяющей
последовательностью
Unable to redefine an object-like macro to a macro with different replacement list
FEC01029 ERROR
Невозможно переопределить макрос с параметрами макросом с другим списком
параметров
Unable to redefine a function-like macro to a macro with different parameter list
FEC01030 ERROR
Не указан(ы) операнд(ы) оператора '##'
Missing concat operator '##' operand(s)
FEC01031 ERROR
Число аргументов макроса не соответствует числу его формальных параметров
Actual macro argument count does not match macro formal parameter count
FEC01032 ERROR
Повторное использование имени формального параметра
Duplicated formal parameter
FEC01033 ERROR
Синтаксическая ошибка в списке параметров макроса: ожидается '%c' или '%c'
Syntax error in macro parameter list: '%c' or '%c' expected
FEC01034 ERROR
174
ЮФКВ.30074-01 33 09
Синтаксическая ошибка в списке параметров макроса: ожидается идентификатор
Syntax error in macro parameter list: identifier expected
FEC01035 ERROR
Синтаксическая ошибка в списке параметров макроса: ожидается идентификатор или
'%c'
Syntax error in macro parameter list: identifier or '%c' expected
FEC01036 ERROR
Операнд оператора '#' не указан или не является параметром макроса
Stringize operator '#' operand is missed or is not a macro parameter
FEC01037 ERROR
Оператор '##' не может начинать или завершать заменяющую последовательность
макроса
Concat operator '##' cannot appear at the beginning and at the end of macro replacement list
FEC01038 ERROR
Синтаксическая ошибка в списке аргументов макроса с параметрами: незавершенный
список аргументов
Syntax error in function-like macro argument list: unterminated argument list
FEC01039 ERROR
Невозможно переопределить стандартный макрос
Unable to redefine a predefined macro
FEC01040 ERROR
Невозможно отменить определение стандартного макроса
Unable to undefine a predefined macro
FEC01041 ERROR
Данная форма директивы #line не поддерживается
Given form of #line is not yet supported
FEC01042 ERROR
175
ЮФКВ.30074-01 33 09
Превышен максимальный уровень вложенности включаемых файлов (%d)
Too large nesting level for include-files (maximum is %d)
FEC01043 ERROR
Неверное задание имени включаемого файла '%s' в директиве #include
Illegal form of file name '%s' in #include directive
Если препроцессор не может за разумное число макроподстановок (например, за сто) сделать из
последовательности pp-token после слова #include строку или что-то в угловых скобках, то
компилятор трактует это как ошибку и выводит данное сообщение. См. также message 1011.
FEC01044 ERROR
Невозможно переопределить макрос с параметрами макросом с другой заменяющей
последовательностью
Unable to redefine a function-like macro to a macro with a different replacement list
FEC01045 ERROR
Объявление недопустимо в этом контексте
The declaration is illegal in this context
FEC01046 ERROR
Недопустимый инициализатор
Illegal initializer
FEC01047 ERROR
Недопустимое выражение
Illegal expression
FEC01048 ERROR
Оператор sizeof без скобок
Sizeof operator without brackets
FEC01049 ERROR
Незаверешена символьная константа
Unterminated character constant
176
ЮФКВ.30074-01 33 09
FEC01050 ERROR
Незаверешена символьная константа
Unterminated character constant
FEC01051 ERROR
Недопустимое использование спецификатора типа памяти
Incorrect usage of a memspec
FEC01052 ERROR
Недопустимый тип
Incorrect type
FEC01053 ERROR
Член типа bit
Bit member
FEC01054 ERROR
Объявление типа в выражении
A type definition in expression
FEC01055 ERROR
Недопустимый суффикc при числе
Bad suffix on number
FEC01056 ERROR
Недопустимое объявление
Illegal declaration
FEC01057 ERROR
Зарезервированное слово 'defined' не может быть именем макрокоманды
Reserved word 'defined' cannot be used as macro name
FEC01058 ERROR
Синтаксическая ошибка в операторе _Pragma: ожидается '%s'
177
ЮФКВ.30074-01 33 09
Syntax error in _Pragma operator: '%s' expected
FEC01059 ERROR
В 16-ричной плавающей константе двоичная экспонента обязательна
Binary exponent must be specified in hexadecimal floating constant
FEC01999 FATAL
Фактический параметр встраиваемой функции %s должен быть константным
выражением
The actual parameter of the instrinsic function %s must be a constant expression
В ряде встроенных функций (__DELAY_CYCLES, __inb, __inw, __ind, __outb, __outw, __outd) в
качестве первых передаваемых фактических параметров допускаются только константные
выражения.
First actual parameteres of some instrinsic functions (__DELAY_CYCLES, __inb, __inw, __ind,
__outb, __outw, __outd) must be only a constant expression.
FEC02000 FATAL
Общий размер локальных переменных превысил предел для данной платформы в %s
байт
Total size of local variables exceeded platform limit %s bytes
Общий размер локальных переменных данной функции превысил платформеннозависимый
предел. Уменьшите количество и/или размер локальных переменных.
Total size of local variables in given function exceeded platform specific limit. Decrease amount and/or
size of local variables.
178
ЮФКВ.30074-01 33 09
Лист регистрации изменений
Номера листов (страниц)
Изм
изме-
заменен-
.
ненных
ных
новых
Всего
Входящий
аннули-
листов
N
N сопрово-
Подп. Да-
рован-
(страниц)
докумен-
дительного
та
ных
в докум.
та
документа
и дата
Download