УДОСТОВЕРЕН ЮФКВ.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 сопрово- Подп. Да- рован- (страниц) докумен- дительного та ных в докум. та документа и дата