Содержание
- C Programming for Beginners : Length of an Array
- Traditional if-else Statement Syntax
- if-else Statement with Ternary Operator
- Example
- Sizes
- Length of an Array
- Как сделать двумерный массив указанного пользователем значения?
- Решение
- Другие решения
- Ошибка размера массива в C
- 5 ответов
- Error array size missing in
- Name already in use
- sourcepawn / docs / upgrading-1.11.md
- Users who have contributed to this file
C Programming for Beginners : Length of an Array
Length of an Array
It helps us write the if-else statement in just one line ✌️
Traditional if-else Statement Syntax
if-else Statement with Ternary Operator
Example
Let’s just say we want to compare two numbers and print the number which is the greater one.
Now, we could do the same thing within just one line like this :
Or if you wanted to print it rather than returning it, write like this :
This looks so cool 😃
Let’s now implement this into an actual program.
Sizes
Each of the data types consumes a particular set of memory. For example, the int data has a size of 4 bytes of memory.
We can print the size of each of each of the data types by using the sizeof() function.
There is also a specific range of values for each data type.
(This can be vary for different compilers)
Details are listed below in the program in form of comments.
Length of an Array
We know that char type takes 1 byte of memory.
Let’s try a string array.
It gave us an error saying the array size is missing.
Let’s set the size this time.
So we get to choose the size of an array.
Let’s store a string of 3 letters within this array and check whether it prints 3 of 5.
Lets store another string. But this time we won’t specify the size within those brackets.
It gives 4. But it should give 3 right ?
Don’t worry. We can use this feature ✌️
Moral of the story : The size of array depends on the number within those squared brackets or the value stored within it.
So the size is done. Now what about the length ?
The length of the above the above is 4(cuz there are three letters). And the size is 4 too.
For a string array, the length is same as the array size. But can be different for other types of arrays. For example an integer array.
But wait what’s an integer array ?
Like a string array is a set of chars; an int array is a set of integers.
The set is created with curly brackets.
Note : Do not forget to specify the data type of the array as int.
We can see the length of this array is 3 as it has three numbers.
But is the size same ?
No. The size is 12 because each integers holds 4 bytes and there are 3 integers.
So 4 times 3 is 12.
In case of string array, the size was the same the length because the string is a set of chars. And a char takes 1 byte of memory.
So how can we print the length of the integer array ?
Simple! We divide the size of array (12) with the size of first element (4). So we get three.
The size of the first element of the array is 4 cuz it is an integer type.
This is how we can get access to the elements of the array.
Источник
Как сделать двумерный массив указанного пользователем значения?
Как бы я объявил двумерный массив размером n на n, который дает пользователь?
Например, почему это работает:
но это не будет
Возможно ли иметь двумерный массив размера строки и столбца n или вам придется использовать вектор?
Спасибо!
Решение
Сделайте это с вектором, вот так:
Также есть std::valarray шаблон которая аналогична функциональности std::vector , но имеет интересную дополнительную функциональность, которая может быть полезна в случае матрицы.
Другие решения
Чтобы создать многомерный массив, вам нужно написать так:
И не забудьте удалить его:
Но текущая лучшая практика c ++ — никогда не выделять или освобождать память в коде приложения, то есть вы должны использовать std::vector или некоторый другой контейнерный класс.
Этот ответ отличается в двух пунктах от большинства других ответов:
- нет необработанного указателя или выделения памяти
- использовать один непрерывный (линейный) блок памяти
Общий подход использует один линейный блок памяти и сохранение элементов строки после строки или столбца после столбца (Строка или порядок столбцов ). Давайте немного обобщим и скажем, что вы хотите получить двумерное количество типа T с экстентами N0 а также N1 , Тогда вы можете получить необходимую память
Использование вектора вместо необработанного указателя имеет несколько преимуществ. Например, вы не можете забыть освободить память, потому что деконструктор заботится об этом автоматически (RAII идиома ). Другое преимущество заключается в том, что указанный выше конструктор заполняет вектор копиями, созданными по умолчанию. T (вместо того, чтобы оставить память неинициализированной).
Далее вы можете получить доступ к линейной памяти с помощью vector «s член operator[] (или функция-член at если вы хотите, связанные чеки). Вы, вероятно, хотите использовать два индекса n0 а также n1 в промежутках [ 0 , N0 ) а также [ 0 , N1 ), но память является линейной и требует одного индекса. Следовательно, вы можете ввести вспомогательную функцию index чтобы получить доступ к вашему 2D количеству, как, скажем,
Чтобы представить, как это может работать, рассмотрим матрицу 3 на 2. В данном линейном блоке памяти вы можете расположить элементы следующим образом:
В таком случае вы бы написали
В общем для d размеры у вас есть (псевдокод)
где выражения в скобках также называются смолы.
Если вы поместите всю эту логику в класс, она станет очень простой в использовании. Вот пример для вдохновения (онлайн демо с N = 4 ):
Можно создать двумерный массив без использования векторов, как показано ниже. Это будет работать для всех типов.
Но проблема заключается в управлении памятью, так как это грубый подход.
Вместо этого мы можем использовать векторы, которые можно
Источник
Ошибка размера массива в C
Я написал программу для выполнения этих задач: сначала получите строку от пользователя и вычислите ее размер с помощью функции sizeof(). Вот мой код:
Ошибка компиляции: error: array size missing in ‘U1 Почему? Пожалуйста, объясните, что здесь не так?
5 ответов
Вам нужно определить размер массива, чтобы сообщить компилятору, сколько места выделить:
Если вы не знаете размер вашего массива во время компиляции, вы можете динамически распределять память с помощью malloc :
Заметка
всегда будет печатать 256, так как sizeof возвращает размер массива, вычитаемый во время компиляции, а не количество символов, просто прочитанных в массиве. Вы можете использовать sizeof(char) * (strlen(U1) + 1) для вычисления количества байтов, требуемых строкой (+1 происходит от символа NUL-терминатора в конце строки).
C массивы фиксированной длины, поэтому каждый массив должен иметь свой размер, полностью определенный при его объявлении. Действительная декларация — это что-то вроде:
Обратите внимание, что если пользователь вводит больше, чем это число символов (минус один для завершающего нуля), поведение этой программы не определено. Чтобы избежать этой проблемы, замените scanf(«%s») на fgets() и узнайте о динамических массивах.
0 sheu [2013-09-17 16:13:00]
Массивы в C должны быть объявлены с размером. Другой вариант — использовать динамические массивы, которые являются указателями
0 Jupotter [2013-09-17 15:46:00]
Вам нужно указать размер массива. Scanf принимает уже выделенный массив и не изменяет его размер, он просто заполняет его вводом.
Ваш код должен выглядеть так:
Обратите внимание, что я не использовал sizeof , потому что у меня был бы весь размер массива, а не только строка. strlen даст вам размер строки с нулевым завершением.
0 王玉林 [2013-09-17 15:47:00]
вы должны сделать определенный массив, обычный компилятор C не поддерживает динамический массив.
Источник
Error array size missing in
Why does the error actually mean in the code:
void mat( int matrix[][]);
But there’s no error for this code:
void mat( int matrix[]);
Whats the technical difference?
int matrix[] is an incomplete type when used as a paramter. Use int* matrix instead.
int matrix[][] is meaningless. Use int** matrix instead.
Please note that the array sizes are not passed, you must pass these seperately.
BTW why is this code correct:
void mat( int matrix[][1]);
To quote the C standard:
An incomplete type may only by used when the size of an object of that type is not needed. It is not
needed, for example, when a typedef name is declared to be a specifier for a structure or union, or
when a pointer to or a function returning a structure or union is being declared. (See incomplete types
in 6.2.5.) The specification has to be complete before such a function is called or defined.
6.2.5.22 goes on to say:
An array type of unknown size is an incomplete type. It is completed, for an identifier of
that type, by specifying the size in a later declaration (with internal or external linkage).
What does that mean?
It means that for:
the size is not needed. It can be treated as an array of int of unspecified size where the size isn’t needed. Incrementing a pointer to the next element of the array means adding sizeof(int) to the pointer.
a 2D array (an array of int[]) is specified, but we don’t know the size of int[]. In this case, the size is needed. We don’t know how to increment the pointer to an int[].
a 2D array (an array of int[1]) is specified. We know how to increment the pointer to the next element, it’s sizeof(int) * 1.
Why all this? The background link I posted earlier talks about the history of the treatment of arrays.
Источник
Name already in use
sourcepawn / docs / upgrading-1.11.md
- Go to file T
- Go to line L
- Copy path
- Copy permalink
1 contributor
Users who have contributed to this file
Copy raw contents
Copy raw contents
SourcePawn 1.11 contains a major rewrite of the compiler. This rewrite is intended to allow rapid feature development and improve the health and stability of the language. It fixes many bugs, and as a result, old programs may not compile.
Notably, SourcePawn 1.11 does not hide errors in unused functions anymore. If a stock is unused, and has errors, the errors should be fixed or the stock should be removed.
More common errors for 1.11 upgrades are listed below.
The following code is no longer valid:
In previous versions of SourcePawn, the right-hand side of the expression was evaluated after creating the left-hand name. We have changed the ordering to eliminate a source of confusion and possible bugs. Because the right-hand side now evaluates first, the symbol i does not exist.
The fix is to explicitly initialize to zero:
In addition, the following code is no longer valid:
In previous versions, the «const» keyword was not respected. It is now properly implemented.
Return Value Changes
It is now a warning to omit a return statement. That means the following examples are all problematic:
To ease the transition to the new semantic checker, spcomp will emit a warning when the return value is an enum, boolean, or integer. Any other type is an error and compilation will fail.
Functions that return arrays now MUST use transitional syntax. The following will not work:
Instead, it must be:
Two obscure syntax options have been deprecated, and will emit a warning. Using the keyword do before a statement, and omitting parenthesis on control conditionals.
These examples should be changed to the standard syntax, which uses parentheses:
#pragma semicolon 1 now only affects the current file, and does not affect sub-files. This is to enable better compatibility with include files. This also makes language changes less risky for extension developers.
Type checking of arrays has been greatly improved in SourcePawn 1.11. More errors will be caught and more initialization patterns are supported. Below are some common errors that the new compiler finds and some suggestions as to how to fix them.
error 183: brackets after variable name indicates a fixed-size array, but size is missing or not constant
The following code will trigger this error:
When brackets [] follow the variable name, they indicate a fixed size. When they follow the type, they indicate a dynamic or unknown size. The error in this example is that the position indicates a fixed size, but no size was given. There is no way to deduce the size automatically because it’s an argument, and the initializer only applies to default values.
The fix is to use the correct bracket positioning:
error 047: array sizes do not match, or destination array is too small
There are a number of reasons why this error might appear in 1.11 in a script that compiled fine in earlier versions.
String is too big
Earlier versions of SourcePawn incorrectly computed the size of string arrays. For example, char x[3] was internally calculated as four bytes. This has been fixed in 1.11. Plugins relying on this incorrect calculation will no longer compile.
Here are some examples of code that used to work, but don’t anymore:
For international plugins, remember that utf8 strings can occupy more bytes than characters. You can use sizeof() to check the true size of a string.
Multi-dimensional with initializers
The following code will no longer work and will report error 47:
The reason is that the final rank of the array has two different sizes, 4 bytes (for «awp» ) and 16 bytes (for «rocket_launcher» ). Therefore the size of the last dimension is not known at compile-time. There are a few ways to work around this.
First, you can use a hardcoded size:
Second, you can use strcopy :
warning 241: scalar assignment to array is deprecated
This warning will happen when the following pattern is detected:
The error is that 0 is a scalar (a single value) being assigned to an array, which is illegal. The correct syntax is:
For 0 values (or false , or 0.0 , or «» ), an initializer is not needed at all:
Since this pattern is quite common, we special-cased it so that it still works in 1.11 with a warning. In future versions it may become an error.
error 101: fixed dimensions must be after the array name, not on the type
The following code will trigger this error:
The brackets ( [] ) are in the wrong position. Next to the type, they indicate an array of unknown or any size. Next to the name, they indicate a fixed size. The correct syntax is:
error 165: cannot create dynamic arrays in static scope — did you mean to create a fixed-length array with brackets after the variable name?
The following code will trigger this error:
This is similar to error 101 above. The brackets next to the type indicate an array of unknown size. When declaring a local variable in legacy syntax, the 3 indicates a dynamic array. Dynamic arrays aren’t allowed in global or static scope. The correct syntax is:
In earlier versions of SourcePawn, the preprocessor had visibility into things it shouldn’t have, like local variables and enum names. This no longer works:
Instead, consider either removing your dependence on the preprocessor, or by introducing a new macro:
The old behavior only worked in earlier compilers due to an implementation quirk. The preprocessor was sharing symbol tables with the rest of the compiler, meaning it had access to the entire language state. This kind of thing does not work at all in a proper compiler pipeline because the preprocessing stage is textual, not semantic. In fact it is an entirely separate language. So with 1.11, the preprocessor can only see preprocessor state, not language state.
Plugins compiled with SourcePawn 1.11 use a new internal representation for multi-dimensional arrays called «direct arrays». A new method, IPluginRuntime::UsesDirectArrays , has been added to detect this. For extensions that provide natives taking multi-dimensional arrays or invoke public functions with multi-dimensional arrays, it is necessary to check for direct arrays and just memory access appropriately.
Previously, the effective address for a[i][j] was a + i + a[i] + j . When UsesDirectArrays is true, the formula is a[i] + j .
Источник
- Forum
- General Programming Boards
- C Programming
- «Missing array size»
-
12-30-2005
#1
Registered User
«Missing array size»
Once again, this seems to be a difference of compilers. I downloaded 2 different ones, because one will allow making DOS programs, and the other is w32 console programs.
In the win32 one, (DevC++) if I type:
the compiler tells me «Missing array size», but if I use my MSDOS compiler (Pacific C), it works just fine. Also I’ve seen examples in the book I’m reading to try and learn c and on the web where people define an array with no size in the examples.
Thanks for any input, you guys are proving to be an invaluable resource, esp. when google fails me.
-
12-30-2005
#2
ATH0
You can only have arrays with no size if you:
a — are filling them at the time you declare them.Code:
char carray[] = "some stuff here"; int iarray[] = { 1, 2, 33, 44, 567 };
b — they’re the last member of a structure, and you’re using them for making your structures ugly…er…variable sized kinda sorta.
Code:
struct foo { size_t somestuff; char somejunk[]; }; struct foo *b; b = malloc( sizeof( *b ) + numofbytestotackontheend );
Quzah.
Hope is the first step on the road to disappointment.
-
12-30-2005
#3
Registered User
Thanks, but what if you don’t know what size you want the array to be when you declare it? Like if a user is going to type in a string, and of course you have no idea how much they will type in many cases…?
-
12-30-2005
#4
and the hat of int overfl
> but if I use my MSDOS compiler (Pacific C), it works just fine
Most old DOS compilers have a very loose idea of C compared to modern ANSI-C compilers.> Like if a user is going to type in a string, and of course you have no idea how much they will type in many cases…?
You never know this, which is why you should always use fgets() in the first instance to read the input in sizes you know.
-
12-30-2005
#5
Registered Luser
You either use a fixed length array and limit the input to the size of the array (eg. fgets) or you use a pointer, malloc some memory, read in an amount of input, and if there’s still more to be read, allocate more memory, read more, and so on.
See ggets by cbfalconer for an example of the latter.
http://cbfalconer.home.att.net/download/index.htm
-
12-30-2005
#6
Registered User
I feel like I should be paying you guys for the education, thanks again.
I know how to program a decent amount in qb, but I got tired of that and wanted to learn something powerful like c, and I definatly am benefitting from all your help.
-
12-30-2005
#7
Registered User
PS — my bad about saying that I saw examples where they did that, I was mistaken. They were actually doing char a; where it’s just 1 character, not a string.
Popular pages
- Exactly how to get started with C++ (or C) today
- C Tutorial
- C++ Tutorial
- 5 ways you can learn to program faster
- The 5 Most Common Problems New Programmers Face
- How to set up a compiler
- 8 Common programming Mistakes
- What is C++11?
- Creating a game, from start to finish
Recent additions
- How to create a shared library on Linux with GCC — December 30, 2011
- Enum classes and nullptr in C++11 — November 27, 2011
- Learn about The Hash Table — November 20, 2011
- Rvalue References and Move Semantics in C++11 — November 13, 2011
- C and C++ for Java Programmers — November 5, 2011
- A Gentle Introduction to C++ IO Streams — October 10, 2011
Similar Threads
-
Replies: 16
Last Post: 05-29-2009, 07:25 PM
-
Replies: 17
Last Post: 03-24-2009, 10:33 AM
-
Replies: 2
Last Post: 06-13-2005, 07:31 AM
-
Replies: 3
Last Post: 07-09-2004, 09:54 AM
-
Replies: 30
Last Post: 07-01-2004, 07:48 PM
Руководство пользователя по MPLAB® компилятору Си для PIC24 и dsPIC®
Введение
В данном приложении приводится список наиболее общих диагностических
сообщений, выдаваемых компилятором MPLAB Cи для PIC24 и dsPIC® (бывший |
|
MPLAB C30). |
. |
A |
Компилятор может производить два вида диагностических сообщений: ошибки и предупреждения. Каждый вид имеет свои цели.
• Ошибки сообщают о проблемах, которые делают невозможной компиляцию
чтобы убедиться, что ваша программаWilsonделает именно то, что вы запланировали; также они могут означать устаревшие возможности или использование
программы. Компилятор сопровождает сообщение именем исходного файла и номером его строки, где обнаружена ошибка.
• Предупреждения сообщают об остальных странных условиях в коде, которые могут означать наличие проблемы, хотя компиляция может продолжаться (и
продолжается). Предупреждение также содержит имя исходного файла и номер его строки, но включает текст warning, чтобы отличать его от ошибки.
Предупреждения могут означать опасные места, которые вы должны проверить,
нестандартных особенностей компилятора. Многие предупреждения выдаются
только если вы это запросите с помощью опций –W (например, опция –Wall |
|
запрашивает целый ассортимент полезных предупреждений). |
|
В редких случаях компиляторby |
может выдать сообщение о внутренней ошибке. Это |
Translated |
|
означает, что компилятор сам обнаружил неисправность, о которой следует |
сообщить в службу поддержки Microchip. Подробности отправки подобного сообщения указаны в соответствующем месте данного руководства.
Ошибки
Символы
x used with no following HEX digits
Escape последовательность x должна быть продолжена шестнадцатеричными цифрами.
‘&’ constraint used with no register class
Неправильный оператор ассемблера.
‘%’ constraint used with last operand
Неправильный оператор ассемблера.
#elif after #else
В условных директивах препроцессора #else должна появляться только после
#elif.
#elif without #if
В условных директивах препроцессора перед #elif должна быть #if.
#else after #else
В условных директивах препроцессора #else может быть использована только раз.
© 2008 Microchip Technology Inc. |
DS51284H(ru) стр. C-1 |
16-битовый компилятор Си. Руководство
#else without #if
В условных директивах препроцессора перед #else должна быть использована
#if.
#endif without #if
В условных директивах препроцессора перед #endif должна быть #if.
#error ‘message‘
Это сообщение появляется в ответ на директиву #error.
#if with no expression |
. |
|
Отсутствует константное выражение. |
||
#include expects «FILENAME» or <FILENAME>
Имя файла в директиве #include пропущено или не завершено. Оно должно быть |
|
заключено в кавычки или угловые скобки. |
A |
Wilson |
|
‘#’ is not followed by a macro parameter |
За оператором ‘#’ должно следовать имя аргумента макро.
‘#keyword ‘ expects «FILENAME» or <FILENAME>
Указанная директива требует наличия имени файла в кавычках или угловых скобках в качестве аргумента.
‘##’ cannot appear at either end of a macro expansion
Оператор конкатенации ‘##’ не может появляться в начале и в конце макрорасширения.
a parameter list with an ellipsis can’t match an empty parameter name list declaration
Объявление и определение функции должны соответствовать друг другу.
«symbolTranslated» after #line is not a positive integer
#line предполагает положительный целый номер исходной строки. aggregate value us d where a complex was expected
Не используйте объединения вместо комплексных величин. aggregate v lue used where a float was expected
Не используйте объединения вместо величин с плавающей точкой. aggregate value used where an integer was expected
Не используйте объединения вместо целых величин. alias arg ot string
Аргументом атрибута alias должна быть строка, определяющая имя, для которого текущий идентификатор является псевдонимом.
alignment may not be specified for ‘identifier ‘
Атрибут выравнивания может использоваться только с переменной.
‘__alignof’ applied to a bit-field
Оператор ‘__alignof’ не может применяться к битовым полям.
alternate interrupt vector is not a constant
Номер вектора прерывания должен быть целой константой.
alternate interrupt vector number n is not valid
Указан недопустимый номер вектора прерывания.
DS51284H(ru) стр. C-2 |
© 2008 Microchip Technology Inc. |
argument to ‘-specs’ is missing
Пропущено имя библиотеки.
argument to ‘-l’ is missing
Пропущено имя каталога.
argument to ‘-B’ is missing
argument of ‘asm’ is not a constant string
argument ‘identifier ‘ doesn’t match prototype
Приложение C Диагностика
ambiguous abbreviation argument
Задано неоднозначно трактуемое сокращение командной строки.
an argument type that has a default promotion can’t match an empty parameter name list declaration.
Объявление и определение функции должны соответствовать друг другу.
args to be formatted is not …
Первый по порядку проверяемый аргумент атрибута форматирования определяет параметр, который не объявлен ‘…’.
Тип указанного аргумента функции должен соответствовать. ее прототипу.
Аргумент ‘asm’ должен быть константной строкой.A Пропущено имя файла в опции –specsWilson. argument to ‘-specs=’ is missing
Пропущено имя файла в опции –specs. argument to ‘-x’ is missingby
Пропущено название языка. argument to ‘-Xlinker’ is missing
Пропущен аргумент для передачи компоновщику. arithmeticTranslatedon pointer to an incomplete type
Арифметические операции с указателями на незавершенные типы не разрешаются. array index in non-array initializer
Не используйте индексы массивов при инициализации отличных от массивов переменных.
array size missing in ‘identifier ‘
Пропущен размер указанного массива. array subscript is not an integer
Индексы массива должны быть целыми.
‘asm’ operand constraint incompatible with operand size
Неправильный оператор ассемблера.
‘asm’ operand requires impossible reload
Неправильный оператор ассемблера.
asm template is not a string constant
Шаблон ассемблера должен быть строковой константой.
assertion without predicate
За #assert или #unassert должен следовать предикат из единственного идентификатора.
© 2008 Microchip Technology Inc. |
DS51284H(ru) стр. C-3 |
16-битовый компилятор Си. Руководство
‘attribute‘ attribute applies only to functions
Указанный атрибут применим только к функциям.
B
bit-field ‘identifier ‘ has invalid type
Указанное битовое поле должно быть интегрального типа или типа перечисления.
bit-field ‘identifier ‘ width not an integer constant
Размер указанного битового поля должен быть целой константой.
both long and short specified for ‘identifier ‘
Указанная переменная не может быть одновременно. типов long и short. both signed and unsigned specified for ‘identifierA ‘
Указанная переменная не может быть одновременно знаковой и беззнаковой. braced-group within expression allowed only inside a function
Недопустимо использование заключеннойWilson фигурными скобками группы внутри выражения за пределами функции.
break statement not within loop or switch
Оператор break должен использоваться только внутри операторов выбора или цикла.
__builtin_longjmp second argument must be 1
Второй аргумент __builtin_longjmp должен быть 1.
C
called object is not a functionby
Только функцию можно вызывать в Си. cannot convert to a pointer type
Выражение не может быть приведено к типу указателя. cannotTranslatedput object with volatile field into register
Недопустимо помещать объект с volatile полем в регистр. cannot reload in eger constant operand in ‘asm’
Неправильный оператор ассемблера. cannot specify both near and far attributes
Атрибуты near и far взаимно исключающие, только один из них может использоваться для функции или переменной.
cannot take address of bit-field ‘identifier ‘
Попытка получить адрес указанного битового поля некорректна. can’t open ‘file‘ for writing
Система не может открыть указанный файл. Возможными причинами может быть отсутствие места, отсутствие каталога или прав записи в данный каталог.
can’t set ‘attribute‘ attribute after definition
Указанный атрибут должен использоваться при определении символа, а не после.
case label does not reduce to an integer constant
Метка при case должна быть целой константой периода компиляции.
case label not within a switch statement
Метка при case должна быть внутри оператора выбора.
cast specifies array type
Недопустимо использовать тип массива для приведения типов.
DS51284H(ru) стр. C-4 |
© 2008 Microchip Technology Inc. |
Приложение C Диагностика
cast specifies function type
Недопустимо использовать тип функции для приведения типов.
cast to union type from type not present in union
Приведение к типу союза допустимо только из типа, представленного в союзе.
char-array initialized from wide string
Символьный массив можно инициализировать только обычной строкой, но не widestring.
file: compiler compiler not installed on this system
complex invalid for ‘identifier ‘ |
. |
|
Квалификатор complex может применяться толькоA |
к интегральным типам или типам |
|
с плавающей точкой. |
||
conflicting types for ‘identifier ‘ |
Дистрибутив только компилятора Си, другие языки высокого уровня не поддерживаются.
continue statement not within loop
Несколько |
несовместимых |
объявлений |
обнаружено |
для |
указанного |
идентификатора. |
Wilson |
||||
Оператор continue может использоваться только внутри цикла. conversion to non-scalar type requested
Преобразование типов допустимо только для скалярных, а не составных типов.
D
data type of ‘name‘ isn’t suitableby for a register
Указанный тип данных не соответствует запрошенному регистру.
declaration for parameter ‘identifier ‘ but no such parameter
Массив функций недопустим.
В спискеTranslatedпараметров можно объявлять только параметры. declaration of ‘identifier ‘ as array of functions
declaration of ‘iden ifier ‘ as array of voids void массив недопустим.
‘identifier ‘ dec ared as function returning a function
Функция не может возвращать функцию.
‘identifier ‘ declared as function returning an array
Функция не может возвращать массив. decrement of pointer to unknown structure
Нельзя декрементировать указатель на неизвестную структуру.
‘default’ label not within a switch statement
Вариант default должен быть внутри оператора switch.
‘symbol ‘ defined both normally and as an alias
Символ не может использоваться в качестве псевдонима, если он уже определен.
‘defined ‘ cannot be used as a macro name
Имя defined нельзя использовать для макроса.
dereferencing pointer to incomplete type
Разыменованный указатель должен быть указателем на незавершенный тип.
© 2008 Microchip Technology Inc. |
DS51284H(ru) стр. C-5 |
empty character constant
duplicate (or overlapping) case value
Структура не может иметь одинаковых членов.
duplicate member ‘identifier ‘
16-битовый компилятор Си. Руководство
division by zero in #if
Деление на ноль.
duplicate case value
Варианты в операторе выбора должны быть уникальны.
duplicate label ‘identifier ‘
Указанная метка в пределах видимости должна быть уникальна.
duplicate macro parameter ‘symbol ‘
Указанный символ использован в списке параметров более одного раза.
A . Диапазоны выбора не должны дублироваться или перекрываться. Сообщение об ошибке ‘this is the first entry overlappingWilsonthat value‘ будет обозначать место первого
вхождения дубликата или перекрытия. Диапазоны выбора являются расширением стандарта ANSI для компилятора.
E
elements of array ‘identifier ‘ have incomplete type
Элементы массива должны быть завершенных типов.
Пустая текстовая константа запрещена. empty file name in ‘#keywordby ‘
В аргументе указанной директивы используется пустое имя файла. empty index range in initializer
Скалярный инициализатор не может быть пустым. enumerator value for ‘identifier ‘ not integer constant
Нельзя использовать пустые диапазоны индексов в инициализаторах. emptyTranslatedscalar initializer
Значения перечисления должны быть целыми константами. error closing ‘file‘
Система не может закрыть указанный файл. Возможная причина — нехватка места или слишком большой размер файла
error writing to ‘file‘
Система не может записать указанный файл. Возможная причина — нехватка места или слишком большой размер файла
excess elements in char array initializer
В списке инициализации больше элементов, чем требуется для символьного массива.
excess elements in struct initializer
Не используйте лишние элементы в инициализаторе структуры.
expression statement has incomplete type
Выражение имеет незавершенный тип.
extra brace group at end of initializer
Не следует помещать лишние группы фигурных скобок в конце инициализатора.
extraneous argument to ‘option‘ option
Слишком много аргументов в указанной опции командной строки.
DS51284H(ru) стр. C-6 |
© 2008 Microchip Technology Inc. |
flexible array member in union
Приложение C Диагностика
F
‘identifier ‘ fails to be a typedef or built in type
Данные могут иметь только встроенный тип или тип, определенный typedef.
field ‘identifier ‘ declared as a function
Указанное поле не должно быть определено как функция.
field ‘identifier ‘ has incomplete type
Указанное поле должно быть завершенного типа.
first argument to __builtin_choose_expr not a constant
. |
|
Первый аргумент должен быть константным выражением, определенным на этапе |
|
компиляции. |
A |
flexible array member in otherwise empty struct
Незавершенный тип массива может быть последним элементом структуры, состоящей из более чем одного именованногоWilson члена.
Незавершенный тип массива нельзя использовать в союзе. flexible array member not at end of truct
Незавершенный тип массива может быть только последним элементом структуры.
‘for’ loop initial declaration used outside C99 mode
Объявление инициализации цикла for недопустимо за пределами режима C99. format string arg follows the args to be formatted
Аргументы в атрибуте форматаby являются несовместимыми. Индекс аргумента строки форматирования должен быть меньше, чем индекс первого проверяемого аргумента. ((прим.перев.) см. п. 2.3.2. «Определение атрибутов функций», атрибут format (archetype, string-index, first-to-check))
formatTranslatedstring arg not a string type
Аргумент индекса строки форматирования в атрибуте format определяет параметр, который не имеет строкового типа.
format string has invalid operand number
Аргумент, задающий номер операнда в атрибуте format должен быть константой этапа компиляции.
function definition declared ‘register ‘
Определения функций не могут быть объявлены register. function definition declared ‘typedef’
Определения функций не могут быть объявлены typedef. function does not return string type
fo mat arg является единственным атрибутом, который используется с функцией, возвращающей строку.
function ‘identifier ‘ is initialized like a variable
Недопустимо инициализировать указанную функцию как переменную.
function return type cannot be function
Функция не может возвращать функцию.
G
global register variable follows a function definition
Определение глобальных переменных должно предшествовать определению функций.
© 2008 Microchip Technology Inc. |
DS51284H(ru) стр. C-7 |
16-битовый компилятор Си. Руководство
global register variable has initial value
Нельзя определять начальное значение для глобальной регистровой переменной.
global register variable ‘identifier ‘ used in nested function
Нельзя использовать указанную глобальную переменную во вложенной функции.
H
‘identifier ‘ has an incomplete type
Недопустимо, чтобы указанный идентификатор имел незавершенный тип.
‘identifier ‘ has both ‘extern’ and initializer
Нельзя инициализировать переменную, объявленную. как extern. hexadecimal floating constants require an exponentA
Шестнадцатеричная константа с плавающей точкой должна иметь показатель.
I
implicit declaration of function ‘identifier ‘
Указанная функция используется без предшествующего объявления прототипа или определения.
impossible register constraint in ‘asm’
Неправильный оператор ассемблера.
incompatible type for argument of ‘ dentifier ‘
При вызове функций в Си следует проверять соответствие типов фактических |
|
параметров формальным. |
Wilson |
by |
incompatible type for argument n of indirect function call
При вызове функций в Си следует проверять соответствие типов фактических параметров формальным.
incompatible types in operation
Указанная опция командной строки незавершена. inconsistent operand constraints in an ‘asm’
Типы,Translatedиспользуемые в указанной операции должны быть совместимы. incomplete ‘name‘ option
Неправильный оператор ассемблера. increment of pointer to unknown structure
Нельзя инкрементировать указатель на неизвестную структуру. initializer element is not computable at load time
Элементы инициализации должны быть вычислимы на этапе загрузки. initi lizer element is not constant
Элементы инициализации должны быть константами. initializer fails to determine size of ‘identifier ‘
Инициализатор массива не может определить его размер.
initializer for static variable is not constant
Инициализатор статической переменной должен быть константой.
initializer for static variable uses complicated arithmetic
Инициализатор статической переменной не должен использовать сложную арифметику.
input operand constraint contains ‘constraint ‘
Указанное ограничение недопустимо для входного операнда.
DS51284H(ru) стр. C-8 |
© 2008 Microchip Technology Inc. |
Приложение C Диагностика
int-array initialized from non-wide string
Массив целых не может быть инициализирован из обычной строки (non-wide string).
interrupt functions must not take parameters
Функция обслуживания прерывания не может принимать параметры. Следует использовать void для явного обозначения того, что список параметров отсутствует.
interrupt functions must return void
Функция обслуживания прерывания должна возвращать значение типа void. Никакие другие типы не разрешены.
interrupt modifier ‘name‘ unknown |
|
Компилятор принимает только irq, |
altirq или save в качестве модификаторов |
атрибута interrupt. |
. |
interrupt modifier syntax error |
A |
Wilson |
Синтаксическая ошибка в модификаторе атрибута interrupt. interrupt pragma must have file scope
#pragma interrupt должна иметь область действия в пределах файла. interrupt save modifier syntax error
Синтаксическая ошибка в модификаторе save атрибута interrupt. interrupt vector is not a constant
Номер вектора прерывания должен быть целой константой. interrupt vector number n is not valid
Нужно указать разрешенныйby номер вектора прерывания.
invalid #ident directive
За директивой #ident должна следовать строковая константа в кавычках.
invalid arg to ‘__builtin_frame_address’
текущую, и т.д.) и целой константой. invalid arg to ‘ builtin_return_address’
АргументTranslatedдолжен быть уровнем вызывающей функции (где 0 возвращает адрес фрейма текущей функции, 1 возвращает адрес фрейма функции, вызвавшей
Аргумент уровня должен быть целой константой. invalid argument for ‘name‘
Компилятор предполагает использование data или prog в качестве атрибута пространства параметров.
invalid character ‘character‘ in #if
Сообщение появляется, если в директиве #if встречаются непечатные символы, например символы управления.
invalid initial value for member ‘name‘
Указанное битовое поле может быть инициализировано только целым. invalid initializer
Не следует использовать неправильные инициализаторы.
Invalid location qualifier: ‘symbol ‘
Возможно ‘sfr‘ или ‘gpr‘, которые игнорируются в устройствах dsPIC как квалификаторы размещения.
invalid operands to binary ‘operator ‘
Недопустимые операнды для указанного бинарного оператора.
© 2008 Microchip Technology Inc. |
DS51284H(ru) стр. C-9 |
16-битовый компилятор Си. Руководство
Invalid option ‘option‘
Указана недопустимая опция командной строки.
Invalid option ‘symbol ‘ to interrupt pragma
В прагме interrupt допустимы опции shadow и/или save.
Invalid option to interrupt pragma
«Мусор» в конце прагмы.
Invalid or missing function name from interrupt pragma
Прагма прерывания требует имени функции, которая будет вызываться.
Invalid or missing section name |
|
Имя секции должно начинаться с буквы или |
символа подчеркивания (‘_’) с |
. |
|
последующими буквами, цифрами или символами подчеркивания. Имена ‘access‘, |
|
‘shared‘ и ‘overlay‘ имеют специальное значение.A |
|
invalid preprocessing directive #’directive‘ |
Недопустимая директива препроцессора. Надо проверить написание. invalid preprologue argument
Аргумент preprologue может быть оператором или операторами ассемблера, со своими аргументами, заключенными в двойные кавычки.
invalid register name for ‘name‘
Указанная регистровая переменная с файловой областью действия имеет
запрещенное имя регистра. |
Wilson |
invalid register name ‘name‘ for register variable |
|
Указанное имя не является именем регистра. |
|
invalid save variable in interrupt pragma |
|
В качестве аргумента savebyтребуется символ или список символов. |
|
invalid storage class for function ‘identifier ‘ |
ФункцияTranslatedне может иметь регистровый класс памяти. invalid suffix ‘suffix‘ on integer constant
Целая константа может иметь только суффиксы ‘u’, ‘U’, ‘l’ и ‘L’. invalid suffix on floating constant
Константа с плавающей точкой может иметь только суффиксы ‘f’, ‘F’, ‘l’ or ‘L’. Если это две буквы ‘L’, они должны быть вместе и в одном регистре.
invalid type argument of ‘operator ‘
Недопустимый тип аргумента для указанного оператора. inv lid type modifier within pointer declarator
В объявлении указателя допустимы только модификаторы const или volatile. invalid use of array with unspecified bounds
Массив с незаданными границами должен использоваться только разрешенными способами.
invalid use of incomplete typedef ‘typedef ‘
Указанный тип, заданный с помощью typedef, используется неправильно, это запрещено.
invalid use of undefined type ‘type identifier ‘
Указанный тип, заданный с помощью type, используется неправильно, это запрещено.
DS51284H(ru) стр. C-10 |
© 2008 Microchip Technology Inc. |
language ‘name‘ not recognized
Приложение C Диагностика
invalid use of void expression
Выражение void не должно использоваться.
«name» is not a valid filename
#line требует допустимого имени файла.
‘filename‘ is too large
Указанный файл слишком велик для обработки. Возможно, он больше 4 Гб и препроцессор отказывается обрабатывать такой большой файл. Необходимо, чтобы размер файла был меньше 4Гб.
ISO C forbids data definition with no type or storage class
Для определения данных в стандарте ISO |
Cи требуется указать тип или |
|
спецификатор класса памяти. |
A |
. |
ISO C requires a named argument before ‘…’ |
||
Wilson |
ISO Си требует именованного аргумента перед ‘…’.
L
label label referenced outside of any functi n
Ссылка на указанную метку допустима только внутри функции. label ‘label‘ used but not defined
Указанная метка используется, но не определена.
Допустимые языки включают Си и ассемблер.
filename: linker input file unusedby because linking not done
Указанный файл был задан в командной строке и был принят как входной файл для компоновщика (т.к. не был опознан, как что-то другое). Однако, компоновка не производилась, поэтому данный файл просто проигнорирован.
longTranslatedlong long is too long for GCC
Компилятор поддерживает целые не длиннее, чем long long.
long or short sp cifi d with char for ‘identifier ‘
Квалификаторы long и short не могут использоваться с типом char. long or short specified with floating type for ‘identifier ‘
Квалификаторы long и short не могут использоваться с типом float. long, short, signed or unsigned invalid for ‘identifier ‘
Квалификаторы long, short, signed и unsigned могут использоваться только с интегральными типами.
M
mac o names must be identifiers
Имена макросов должны начинаться с буквы или символа подчеркивания, за которыми следуют остальные буквы, цифры или символы подчеркивания.
macro parameters must be comma-separated
Между параметрами в списке параметров должны быть запятые.
macro ‘name‘ passed n arguments, but takes just n
Слишком много аргументов было передано указанному макросу.
macro ‘name‘ requires n arguments, but only n given
Слишком мало аргументов было передано указанному макросу.
matching constraint not valid in output operand
Неправильный оператор ассемблера.
© 2008 Microchip Technology Inc. |
DS51284H(ru) стр. C-11 |
missing ‘)’ to complete answer
16-битовый компилятор Си. Руководство
‘symbol ‘ may not appear in macro parameter list
Указанный символ недопустим в качестве параметра.
Missing ‘=’ for ‘save’ in interrupt pragma
Параметр save требует знака равенства перед списком сохраняемых переменных, например: #pragma interrupt isr0 save=var1,var2
missing ‘(‘after predicate
#assert или #unassert предполагает наличие скобок вокруг ответа, например:
#assert PREDICATE (ANSWER)
missing ‘(‘ in expression
Несоответствие скобок, ожидается открывающаяся скобка. |
||
missing ‘)’ after «defined» |
. |
|
A |
||
Ожидается закрывающаяся скобка. |
||
missing ‘)’ in expression |
Несоответствие скобок, ожидаетсяWilsonзакрывающаяся скобка. missing ‘)’ in macro parameter list
Ожидаются параметры макроса, заключенные в скобки и разделенные запятыми.
#assert или #unassert предполагает наличие скобок вокруг ответа. missing argument to ‘option‘ option
Указанная опция командной строки требует аргумента. missing binary operator beforeby token ‘token‘
Перед указанной лексемой ожидается бинарный оператор. missing terminating ‘character ‘ character
missing terminating > character
Пропущен указанный терминальный символ, такой как: одинарная кавычка (‘), двойнаяTranslatedкавычка (“) или угловая скобка (>).
Ожидается терминальный символ (>) в директиве #include.
more than operands in ‘asm’
Неправильный оператор ассемблера. multiple defau t labels in one switch
В каждом операторе выбора допустим только один вариант default. multiple parameters named ‘identifier ‘
Имя параметра должно быть уникально.
multiple storage classes in declaration of ‘identifier ‘
Каждое объявление может содержать один класс памяти.
N
negative width in bit-field ‘identifier ‘
Размер битового поля не может быть отрицательным числом.
nested function ‘name‘ declared ‘extern’
Вложенная функция не может быть extern.
nested redefinition of ‘identifier ‘
Вложенное переопределение запрещено.
DS51284H(ru) стр. C-12 |
© 2008 Microchip Technology Inc. |
Приложение C Диагностика
no data type for mode ‘mode‘
Указанный аргумент режима, определенный для атрибута mode, распознается как режим устройства GCC, но не поддерживается реализацией данного компилятора.
no include path in which to find ‘name‘
Указанный для включений файл не найден.
no macro name given in #’directive‘ directive
За директивами #define, #undef, #ifdef или #ifndef должно следовать имя макроса.
nonconstant array index in initializer |
. |
|
В инициализаторе можно использовать только индексы постоянного массива. |
||
non-prototype definition here |
||
Если прототип функции следует за определениемA |
без прототипа, а по количеству |
|
Wilson |
аргументов между ними нет соответствия, это сообщение указывает номер строки определения без прототипа.
number of arguments doesn’t match pr t type
Количество аргументов функции должно соответствовать ее прототипу.
O
operand constraint contains incorrectly positioned ‘+’ or ‘=’.
Неправильный оператор ассемблера
operand constraints for ‘asm’ differ in number of alternatives
Неправильный оператор ассемблера operator «defined» requiresbyan identifier
defined подразумевает наличие идентификатора.
operator ‘symbol ‘ has no right operand
Неправильный оператор ассемблера output operand constraint lacks ‘=’
УказанныйTranslatedоператор препроцессора требует правого операнда. output number not directly addressable
Неправильный оператор ассемблера output operand is constant in ‘asm’
Неправильный оператор ассемблера overflow in enumeration values
Значения в перечислении должны быть в диапазоне int.
P
pa ameter ‘identifier ‘ declared void
Указанный параметр не может быть объявлен как void. parameter ‘identifier ‘ has incomplete type
Указанный параметр должен быть завершенного типа. parameter ‘identifier ‘ has just a forward declaration
Указанный параметр должен быть завершенного типа. Использованная ранее декларация не подходит.
parameter ‘identifier ‘ is initialized
Инициализация параметров запрещена.
© 2008 Microchip Technology Inc. |
DS51284H(ru) стр. C-13 |
16-битовый компилятор Си. Руководство
parameter name missing
Макрос предполагает имена параметров. Проверьте две запятые без имени между ними.
parameter name missing from parameter list
Имя параметра должно содержаться в списке параметров.
parameter name omitted
Имя параметра не может быть опущено.
param types given both in param list and separately
parse error |
. |
|
Строка исходного текста не может быть разобрана,A |
она содержит ошибки. |
|
pointer value used where a complex value was expected |
||
Wilson |
Тип параметра может быть задан в списке параметров или отдельно, но не обеими способам одновременно.
Не используйте значения указателей там, где подразумевается наличие комплексных значений.
pointer value used where a floating point value was expected
Не используйте значения указателей там, где подразумевается наличие значений с плавающей точкой.
pointers are not permitted as case values
Значения вариантов в операторе выбора должны быть целыми константами или константными выражениями.
predicate must be an identifierby
#assert или #unassert требуют в качестве предиката один идентификатор.
predicate’s answer is empty
previous declaration of ‘identifier ‘
В #assertTranslatedили #unassert есть предикат и скобки, но в скобках нет ответа, который необходим.
Данное сообщение указывает положение предыдущего объявления данного идентификатора, которое конфликтует с текущим объявлением.
identifier previously declared here
Данное сообщение обозначает положение предыдущего объявления указанного идентификатора, которое конфликтует с текущим объявлением.
identifier previously defined here
Данное сообщение обозначает положение предыдущего определения указанного идентификатора, которое конфликтует с текущим определением.
p ototype declaration
Определяет номер строки, где был определен прототип функции. Используется вместе с другими сообщениями об ошибках.
R
redeclaration of ‘identifier ‘
Указанный идентификатор объявлен многократно.
redeclaration of ‘enum identifier ‘
Перечисление не может быть объявлено повторно.
‘identifier ‘ redeclared as different kind of symbol
Многократные, несовместимые определения существующего идентификатора.
DS51284H(ru) стр. C-14 |
© 2008 Microchip Technology Inc. |
Приложение C Диагностика
redefinition of ‘identifier ‘
Указанный идентификатор определен многократно. redefinition of ‘struct identifier ‘
Структура не может быть переопределена. redefinition of ‘union identifier ‘
Союз не может быть переопределен.
register name given for non-register variable ‘name‘
Попытка отобразить регистром переменную, которая не была объявлена как |
|
регистровая. |
. |
register name not specified for ‘name‘
Переменная с файловой областью действия объявлена регистровой без |
|
соответствия какому-либо регистру. |
A |
Wilson |
register specified for ‘name‘ isn’t suitable for data type
Выравнивание или другие ограничения препятствуют использованию регистра для указанной переменной.
request for member ‘identifier ‘ in something not a structure or union
Только структуры и союзы имею членов. Недопустимо ссылаться на члены чего-то еще, поскольку ничто больше членов не имеет.
requested alignment is not a constant
Аргументом атрибута выравнивания может быть только константа периода
компиляции. |
by |
requested alignment is not a power of 2 |
Аргументом атрибута выравнивания может быть только степень двойки.
requested alignment is too large
return type is incomplete type
ЗапрашиваемоеTranslatedвыравнивание больше, чем позволяет компоновщик. Размер может быть степенью двойки и величиной 4096 или меньше.
Тип возвращаемого значения должен быть завершенный.
S
save variable ‘name‘ index not constant
Размер указанного массива не целая константа. save variable ‘name‘ is not word aligned
Указанный сохраняемый объект должен иметь выравнивание по словам. save v ri ble ‘name‘ size is not even
Указанный сохраняемый объект должен иметь четный размер. save variable ‘name‘ size is not known
Указанный сохраняемый объект должен иметь известный размер. section attribute cannot be specified for local variables
Локальная переменная всегда располагается в регистрах или в стеке, поэтому недопустимо помещать ее в именованную секцию.
section attribute not allowed for identifier
Атрибут секции может быть использован только с функциями или переменными.
section of identifier conflicts with previous declaration
Если один и тот же идентификатор объявляется многократно с использованием атрибута секции, то значения атрибута должны быть совместимы.
© 2008 Microchip Technology Inc. |
DS51284H(ru) стр. C-15 |
16-битовый компилятор Си. Руководство
sfr address ‘address‘ is not valid
Адрес разрешенных SFR должен быть меньше 0x2000.
sfr address is not a constant
Адрес SFR должен быть константой.
‘size of’ applied to a bit-field
sizeof нельзя применять к битовым полям.
size of array ‘identifier ‘ has non-integer type
Спецификатор размера указанного массива должен быть целого типа.
size of array ‘identifier ‘ is negative |
. |
A |
Спецификатор размера указанного массива не должен быть отрицательным. size of array ‘identifier ‘ is too large
Описанный массив слишком велик.
size of variable ‘variable‘ is too largeWilson
Максимальный размер переменной 32768 байтов. storage class specified for parameter ‘identifier ‘
Класс памяти не может быть определен для указанного параметра. storage size of ‘identifier ‘ isn’t constant
Размер памяти под указанный идентификатор должен быть константой периода компиляции.
storage size of ‘identifier ‘ isn’t known
Размер указанного идентификатораby определен не полностью. stray ‘character ‘ in program
Не следует помещать указанный паразитный символ в текст программы.
strftimeTranslatedformats cannot format arguments
При использовании атрибута format, когда параметр archetype это strftime, третий параметр атрибута, указывающий на номер первого аргумента сверяемого со строкой форматирования, должен быть равен 0. Функции стиля strftime не имеют входных значений сверяемых со строкой форматирования.
structure has no member named ‘identifier ‘
Ссылка на указанный несуществующий член структуры. Это запрещено. subscripted value is neither array nor pointer
Только массивы и указатели могут индексироваться. switch quantity not integer
Значение в операторе выбора должно быть целым symbol ‘symbol ‘ not defined
Указанный символ должен быть объявлен перед тем, как его можно использовать в прагме.
syntax error
В указанной строке присутствует синтаксическая ошибка.
syntax error ‘:’ without preceding ‘?’
Символу ‘:‘ должен предшествовать символ ‘?‘ в условном операторе ‘?:‘.
DS51284H(ru) стр. C-16 |
© 2008 Microchip Technology Inc. |
Приложение C Диагностика
T
the only valid combination is ‘long double’
Квалификатор long единственный, который может быть использован с типом double.
this built-in requires a frame pointer
Функция __builtin_return_address требует указатель фрейма. Не следует использовать опцию -fomit-frame-pointer.
this is a previous declaration
too few arguments to function |
. |
|
При вызове функции в Си не следует определятьA |
аргументов меньше, чем нужно |
|
функции, но больше, тоже нельзя. |
||
too few arguments to function ‘identifier ‘ |
Если метка дублируется, данное сообщение помогает определить номер строки, где было предыдущее объявление.
При вызове функции в Си не следуетWilsonопределять аргументов меньше, чем нужно функции, но больше, тоже нельзя.
too many alternatives in ‘asm’
Неправильный оператор ассемблера. too many arguments to function
При вызове функции в Си не следует определять аргументов меньше, чем нужно функции, но больше, тоже нельзя.
too many arguments to functionby ‘identifier ‘
При вызове функции в Си не следует определять аргументов меньше, чем нужно функции, но больше, тоже нельзя.
too many decimal points in number
ДолжнаTranslatedбыть только одна десятичная точка в числе. top-level declaration of ‘identifier ‘ specifies ‘auto’
Переменные au o могут быть объявлены только внутри функций. two or more data types in declaration of ‘identifier ‘
Каждый идентификатор может быть только одного типа. two types specified in one empty declaration
Должно быть задано не более одного типа. type of formal parameter n is incomplete
Задайте завершенный тип для указанного параметра. type mismatch in conditional expression
Типы в условных выражениях должны соответствовать. typedef ‘identifier ‘ is initialized
Недопустима инициализация в typedef. Вместо этого используйте __typeof__.
U
‘identifier ‘ undeclared (first use in this function)
Указанный идентификатор должен быть объявлен.
‘identifier ‘ undeclared here (not in a function)
Указанный идентификатор должен быть объявлен.
© 2008 Microchip Technology Inc. |
DS51284H(ru) стр. C-17 |
16-битовый компилятор Си. Руководство
union has no member named ‘identifier ‘
Обнаружена ссылка на указанный член союза, но данный союз не имеет такого члена. Это запрещено.
unknown field ‘identifier ‘ specified in initializer
Не следует использовать неизвестные поля в инициализаторах.
unknown machine mode ‘mode‘
Аргумент режима, заданный для атрибута mode не опознан как разрешенный.
unknown register name ‘name‘ in ‘asm’ |
. |
||
Неправильный оператор ассемблера. |
A |
||
unrecognized format specifier |
|||
Неправильный аргумент атрибута форматирования. |
|||
unrecognized option ‘-option‘ |
|||
Неизвестная опция командной строки. |
|||
unrecognized option ‘option‘ |
|||
Указанная опция командной строки неизвестна. |
‘identifier ‘ used prior to declarationWilson
Указанный идентификатор используется до своего объявления. unterminated #’name‘
Предполагается наличие #endif в конце условий #if, #ifdef или #ifndef. unterminated argument list invoking macro ‘name‘
При просмотре макроса конец файла обнаружен ранее, чем конец макрорасширения.
‘va start’ used in function with fixed args
unterminated comment |
by |
Конец файла обнаружен ранее, чем конец комментария. |
|
V |
|
Translated |
va start должна использоваться только в функциях с переменным списком аргументов.
variable ‘identifier ‘ has initializer but incomplete type
Запрещено инициализировать переменные незавершенных типов. variable or field ‘identifier ‘ declared void
Ни указанная переменная, ни поле не могут быть объявлены void. variable-sized object may not be initialized
Запрещено инициализировать объект переменного размера. vi tual memory exhausted
Недостаточно памяти для вывода сообщений об ошибках. void expression between ‘(‘ and ‘)’
Ожидалось константное выражение, а найдено пустое выражение в скобках.
‘void’ in parameter list must be the entire list
Если void появился в списке параметров, других параметров быть не должно.
void value not ignored as it ought to be
Значение пустой функции нельзя использовать в выражении.
DS51284H(ru) стр. C-18 |
© 2008 Microchip Technology Inc. |
Приложение C Диагностика
W |
|||
warning: -pipe ignored because -save-temps specified |
|||
Опция -pipe не может быть использована совместно с опцией -save-temps. |
|||
warning: -pipe ignored because -time specified |
|||
Опция -pipe не может быть использована совместно с опцией -time. |
|||
warning: ‘-x spec’ after last input file has no effect |
|||
Опция командной строки -x воздействует только на файлы, указанные в командной |
|||
строке после нее, если таких не будет, опция не действует. |
|||
weak declaration of ‘name‘ must be public |
|||
Указанный «слабый» символ должен иметь глобальную видимость. |
|||
. |
|||
weak declaration of ‘name‘ must precede definition |
|||
A |
|||
Указанный идентификатор сначала определен, а потом объявлен как weak. |
|||
wrong number of arguments specified for attribute attribute |
|||
Слишком мало или слишком много аргументов задано для указанного атрибута. |
|||
wrong type argument to bit-complement |
|||
Не используйте аргументы неправильного типа в этом операторе. |
|||
wrong type argument to decrement |
|||
Не используйте аргументы неправильного типа в этом операторе. |
|||
wrong type argument to increment |
|||
Не используйте аргументы неправильногоWilsonтипа в этом операторе. |
|||
wrong type argument to unary exclamation mark |
|||
Не используйте аргументы неправильного типа в этом операторе. |
|||
wrong type argument to unary minus |
|||
by |
|||
Не используйте аргументы неправильного типа в этом операторе. |
|||
wrong type argument to unary plus |
|||
Не используйте аргументы неправильного типа в этом операторе. |
|||
Z |
|||
zero width for bit-field ‘identifier ‘ |
|||
Указанное битовое поле не может быть нулевого размера. |
|||
C.3. |
Предупреждения |
||
Символы |
|||
‘/*’ within comment |
|||
Признак начала комментария обнаружен внутри комментария. |
|||
Translated |
‘$’ character(s) in identifier or number
Символ доллара в названии идентификатора является расширением стандарта.
#’directive’ is a GCC extension
Директивы #warning, #include_next, #ident, #import, #assert и #unassert
являются расширением GCC и отсутствуют в ISO C89.
#import is obsolete, use an #ifndef wrapper in the header file
Директива #import вышла из употребления. Она использовалась для включения файла, если он еще не был включен. Используйте вместо нее директиву #ifndef.
© 2008 Microchip Technology Inc. |
DS51284H(ru) стр. C-19 |
16-битовый компилятор Си. Руководство
#include_next in primary source file
#include_next начинает поиск списка каталогов заголовочных файл после каталога, в котором был найден текущий файл. В этом случае не было предыдущих заголовочных файлов, поэтому поиск начинается с основного исходного файла.
#pragma pack (pop) encountered without matching #pragma pack (push, <n>)
pack(pop) прагма должна быть парной с pack(push) прагмой, которая должна предшествовать ей во входном файле.
#pragma pack (pop, identifier) encountered without matching #pragma pack (push,
identifier, <n>) |
. |
pack(pop) прагма должна быть парной с pack(push) прагмой, которая должна |
|
предшествовать ей во входном файле. |
A |
#warning: message |
Директива заставляет препроцессор выдать предупреждение и
продолжать обработку. Лексема, следующая за директивой #warning используется в качестве выдаваемого сообщения.
A
absolute address specification ignored
Спецификации абсолютного адреса для секции кода в операторе #pragma игнорируются, поскольку не поддерживаются компилятором. Адрес должен быть задан в сценарии компоновки, а секции кода могут быть определены с помощью ключевого слова __attribute__.
#warning Wilson
address of register variable ‘name‘ requested
Задание регистра не допускаетby получения адреса переменной. alignment must be a small power of two, not n
Параметр выравнивания прагмы упаковки должен быть небольшой степенью
двойки.Translated
anonymous enum eclared inside parameter list
Анонимное перечисление объявляется в списке параметров функции. Как правило, лучшей практикой программирования является объявление перечислений вне списка параметров, поскольку они никогда не смогут стать завершенными типами, будучи определены в списках параметров.
anonymous struct declared inside parameter list
Анонимная структура объявляется в списке параметров функции. Как правило, лучшей практикой программирования является объявление структур вне списка параметров, поскольку они никогда не смогут стать завершенными типами, будучи определены в списках параметров.
anonymous union declared inside parameter list
Анонимный союз объявляется в списке параметров функции. Как правило, лучшей практикой программирования является объявление союзов вне списка параметров, поскольку они никогда не смогут стать завершенными типами, будучи определены в списках параметров.
anonymous variadic macros were introduced in C99
Макрос, принимающий переменной количество аргументов, является особенностью C99.
argument ‘identifier ‘ might be clobbered by ‘longjmp’ or ‘vfork’
Аргумент может быть изменен вызовом longjmp. Это предупреждение возможно только при оптимизирующей компиляции.
DS51284H(ru) стр. C-20 |
© 2008 Microchip Technology Inc. |
Приложение C Диагностика
array ‘identifier ‘ assumed to have one element
Длина указанного массива явно не указана. При отсутствии противоположной информации компилятор считает его состоящим из одного элемента.
array subscript has type ‘char ‘
Индекс массива имеет тип char.
array type has incomplete element type
Типы массивов не должны быть незавершенными типами элементов.
asm operand n probably doesn’t match constraints
Указанный расширенный операнд ассемблера не |
. |
||
соответствует его ограничениям. |
|||
assignment of read-only member ‘name‘ |
|||
Указанный член объявлен как константа |
и не может модифицироваться |
||
присвоением. |
Wilson |
A |
|
assignment of read-only variable ‘name‘ |
Указанная переменная объявлена как константа и не может модифицироваться присвоением.
‘identifier ‘ attribute directive ignored
Указанный атрибут неизвестен или не поддерживается, поэтому игнорируется.
‘identifier ‘ attribute does not apply to types
Указанный атрибут не может использоваться с типами. Он игнорируется.
‘identifier ‘ attribute ignored
Указанный атрибут не имеет значения в данном контексте и поэтому игнорируется.
‘attribute‘ attribute only applies to function types
Указанный атрибут применим только к возвращаемым типам функций и не |
|
применим к другим объявлениям.by |
|
B |
Translated |
backslash and newline separated by space
При обработке escape последовательностей были обнаружены символы backslash и newline, разделенные пробелом.
backslash-newline end of file
При обработке escape последовательностей в конце файла были обнаружены символы backs ash и newline.
bit-field ‘identifier ‘ type invalid in ISO C
Тип, использованный для указанного идентификатора запрещен в ISO Си. braces round scalar initializer
Заданы лишние скобки вокруг инициализатора. built-in function ‘identifier ‘ declared as non-function
Указанная функция имеет такое же имя, как встроенные функции, но объявляется как нечто иное, чем функция.
C
C++ style comments are not allowed in ISO C89
Используйте комментарии в стиле Си ‘/*‘ и ‘*/‘ вместо комментариев в стиле Си++ ‘//‘.
© 2008 Microchip Technology Inc. |
DS51284H(ru) стр. C-21 |
16-битовый компилятор Си. Руководство
call-clobbered register used for global register variable
Выбирайте регистры, которые обычно сохраняются и восстанавливаются вызовами функций (W8-W13), что не позволит библиотечным функциям повредить их содержимое.
cannot inline function ‘main’
Функция main объявляется с атрибутом inline. Это не поддерживается, т.к. main должна вызываться из стартового кода, который компилируется отдельно.
can’t inline call to ‘identifier ‘ called from here
Компилятор не может создать inline вызов указанной функции.
case value ‘n‘ not in enumerated type |
A |
|
тип перечисления, тогда как |
||
Управляющее выражение в операторе switch имеет. |
выражение в варианте выбора имеет значение n, которое не соответствует ни
одному из значений перечисления.
case value ‘value‘ not in enumeratedWilsontype ‘ ame‘
Указанное значение в дополнительном варианте оператора выбора не является элементом указанного типа перечисления.
cast does not match function type
Возвращаемое функцией значение приводится к типу, который не соответствует типу функции.
cast from pointer to integer of different size
Указатель приводится к целому, которое не является 16-битовым.
cast increases required alignment of target type
При компиляции с опцией командной строки -Wcast-align, компилятор проверяет,
чтобы приведение типов не увеличивало необходимое выравнивание целевого типа. |
|
Например, это предупреждающееby |
сообщение будет выдано, если указатель на char |
Translated |
|
приводится к указателю на int, поскольку выравнивание для char (выравнивание |
|
байтов) меньше, чем выравнивание необходимое для int (выравнивание слов). |
|
character constant too long |
|
Символьная константа не должна быть такой длинной. |
comma end of enumerator list
Ненужная запятая в конце списка перечисления.
comma operator in operand of #if
Неожиданный оператор-запятая в директиве #if. compari g floating point with == or != is unsafe
Значения с плавающей точкой могут приближаться к бесконечно точным реальным числам. Вместо проверки на равенство используйте операторы сравнения, чтобы определить, имеют ли эти два значения перекрывающиеся диапазоны.
comparison between pointer and integer
Указатель сравнивается с целым.
comparison between signed and unsigned
Один из операндов сравнения знаковый, тогда как другой — беззнаковый. Знаковый операнд будет рассматриваться как беззнаковое значение, что может быть неправильно.
DS51284H(ru) стр. C-22 |
© 2008 Microchip Technology Inc. |
Приложение C Диагностика
comparison is always n
Сравнение включает в себя только константные выражения, поэтому компилятор может определить результат сравнения еще на этапе компиляции. Результат всегда будет указанным числом.
comparison is always n due to width of bit-field
Результатом операции сравнения с участием битового поля из-за размера битового поля всегда будет указанное число.
comparison is always false due to limited range of data type
Результат операции сравнения на этапе исполнения всегда ложным из-за диапазона |
|
типов данных. |
. |
A |
comparison is always true due to limited range of data type
Результат операции сравнения на этапе исполнения всегда истинным из-за
диапазона типов данных. |
Wilson |
comparison of promoted ~unsigned with co stant
Один из операндов операции сравнения является расширением побитовой инверсии беззнакового значения, а другой — константой.
comparison of promoted ~unsigned with unsigned
Один из операндов операции сравнения является расширением побитовой инверсии беззнакового значения, а другой — просто беззнаковым.
comparison of unsigned expression >= 0 is always true
Сравнение беззнаковой величины с нулем. Поскольку беззнаковое не может быть меньше нуля, результат сравнения на этапе исполнения всегда будет истинным.
comparison of unsigned expression < 0 is always false
Сравнение беззнаковой величины с нулем. Поскольку беззнаковое не может быть |
|
меньше нуля, результат сравненияby |
на этапе исполнения всегда будет ложным. |
Translated |
comparisons like X<=Y<=Z do not have their mathematical meaning
Выражение в Си необязательно означает то же, что и в математике. В частности выражение Си X<=Y<=Z не является эквивалентом математического выражения
X ≤ Y ≤ Z.
conflicting types for built-in function ‘identifier ‘
Указанная функция имеет то же имя, что и встроенная, но объявляется с конфликтующим типом.
const declaration for ‘identifier ‘ follows non-const
Указанный идентификатор был объявлен как константа после того как ранее он был объявлен не константой.
control reaches end of non-void function
Все пути выхода из функции, возвращающей непустое значение, должны приводить к возврату соответствующей величины. Компилятор обнаружил вариант, когда непустая функция заканчивается без явно заданного возвращаемого значения. Это, таким образом, может привести к получению непредсказуемого результата.
conversion lacks type at end of format
При проверке списка аргументов вызываемых функций printf, scanf и т.п. компилятор обнаружил потерю спецификатора типа в поле формата строки форматирования.
concatenation of string literals with __FUNCTION__ is deprecated
__FUNCTION__ будет обработана также, как __func__ (которая определяется стандартом ISO C99). __func__ — это переменная, а не строковый литерал, поэтому она не соединяется с другими строковыми литералами.
© 2008 Microchip Technology Inc. |
DS51284H(ru) стр. C-23 |
16-битовый компилятор Си. Руководство
conflicting types for ‘identifier ‘
Указанный идентификатор имеет многократные и несовместимые объявления.
D
data definition has no type or storage class
Обнаружено определение данных с пропущенным типом и классом памяти.
data qualifier ‘qualifier ‘ ignored
Квалификатор данных, включающий access, shared и overlay, не используется в компиляторе, но может быть тут для совместимости с MPLAB Си компилятором для
PIC18. |
. |
declaration of ‘identifier ‘ has ‘extern’ and is initialized |
|
Внешний идентификатор не должен инициализироваться. |
|
declaration of ‘identifier ‘ shadows a parameterA |
|
Wilson |
Объявление указанного идентификатора «затеняет» параметр, делая его недоступным.
declaration of ‘identifier ‘ shadows a symb l from the parameter list
Объявление указанного идентификатора «затеняет» символ из списка параметров, делая его недоступным.
declaration of ‘identifier ‘ shadows global declaration
Объявление указанного идентификатора «затеняет» глобальное объявление, делая его недоступным.
‘identifier ‘ declared inline after being called
Указанная функция объявленаby inline уже после того, как она была вызвана.
‘identifier ‘ declared inline after its definition
Указанная функция объявлена inline уже после того, как она была определена.
‘identifierTranslated‘ declared ‘static’ but never defined
Указанная функция объявлена static, но не была определена. decrement of read-only member ‘name‘
Указанный член был объявлен как const и не может быть модифицирован декрементом.
decrement of read-only variable ‘name‘
Указанная переменная была объявлена как const и не может быть модифицирована декрементом.
‘identifier ‘ defined but not used
Указанная функция была определена, но никогда не использовалась. deprecated use of label at end of compound statement
Метка не должна быть в конце сложного оператора, за ней должен следовать оператор.
dereferencing ‘void *’ pointer
Разыменование указателя void * некорректно. Перед разыменованием приведите его к указателю на подходящий тип.
division by zero
На этапе компиляции выявлено деление на ноль.
duplicate ‘const’
Квалификатор const должен быть применен к объявлению только один раз.
DS51284H(ru) стр. C-24 |
© 2008 Microchip Technology Inc. |
Приложение C Диагностика
duplicate ‘restrict’
Квалификатор restrict должен быть применен к объявлению только один раз.
duplicate ‘volatile’
Квалификатор volatile должен быть применен к объявлению только один раз.
E
embedded » in format
При проверке списка аргументов вызываемых функций printf, scanf и т.п. компилятор обнаружил » (ноль) в строке форматирования, что может привести к
преждевременному окончанию ее обработки. |
. |
|
empty body in an else-statement |
||
Пустое тело оператора else. |
||
A |
||
empty body in an if-statement |
||
Пустое тело оператора if. |
||
empty declaration |
||
Объявление не содержит объявляемых имен. |
||
empty range specified |
Wilson |
|
Диапазон значений в варианте оператора выбора пуст, т.е. величина нижнего выражения больше величины верхнего. Напомним, что синтаксис диапазона вариантов должен быть case low … high:.
‘enum identifier ‘ declared inside parameter list
Указанное перечисление объявляется в списке параметров функции. Как правило, лучшей практикой программированияby является объявление перечислений вне списка параметров, поскольку они никогда не смогут стать завершенными типами, будучи определены в списках параметров.
enum defined inside parms
ПеречислениеTranslatedобъявлено в списке параметров функции. enumeration value ‘id ntifier ‘ not handled in switch
Управляющее выражение оператора выбора имеет тип перечисления, но не все значения перечисления имеют соответствующие им выражения вариантов ветвления.
enumeration va ues exceed range of largest integer
Величины перечисления представляются целыми. Компилятор определил, что диапазон перечисления не может быть представлен каким-либо из целых форматов компилятора, в том числе и и самым большим.
excess elements in array initializer
В списке инициализации больше элементов, чем требуется для соответствующего ему массива.
excess elements in scalar initializer
Для инициализации скалярной переменной нужен только один инциализатор.
excess elements in struct initializer
В списке инициализации больше элементов, чем требуется для соответствующей ему структуры.
excess elements in union initializer
В списке инициализации больше элементов, чем требуется для соответствующего ему союза.
© 2008 Microchip Technology Inc. |
DS51284H(ru) стр. C-25 |
16-битовый компилятор Си. Руководство
extra semicolon in struct or union specified
Тип структуры или союза содержит лишнюю точку с запятой.
extra tokens at end of #’directive‘ directive
Компилятор обнаружил лишний текст в исходной строке, содержащей указанную директиву.
F
-ffunction-sections may affect debugging on some targets
При одновременном указании опций командной строки –g и –function–sections
возможны проблемы с отладкой. |
. |
first argument of ‘identifier ‘ should be ‘int’ |
Ожидаемое объявление первого аргумента указанного идентификатора должно |
|
иметь тип int. |
A |
floating constant exceeds range of ‘double’ |
Константа с плавающей точкойWilsonслишком большая или слишком маленькая (по абсолютной величине), чтобы быть представленной как double.
floating constant exceeds range of ‘float’
Константа с плавающей точкой слишком большая или слишком маленькая (по абсолютной величине), чтобы быть представленной как float.
floating constant exceeds range of ‘long double’
Константа с плавающей точкой слишком большая или слишком маленькая (по абсолютной величине), чтобы быть представленной как long double.
floating point overflow in expressionby
При сворачивании константного выражения с плавающей точкой компилятор обнаружил переполнение, т.е. оно не может быть представлено как float.
‘type1‘ format, ‘type2‘ arg (arg ‘num‘)
format argument is not a pointer (arg n)
ФорматTranslatedдля первого указанного типа, а аргумент имеет второй указанный тип. Предупреждение относится к аргументу с номером ‘num‘.
При проверке списка аргументов вызываемых функций printf, scanf и т.п. компилятор обнаружил что аргумент n не является указателем, каким должен быть в соответствии со спецификацией формата.
format argument is not a pointer to a pointer (arg n)
При проверке списка аргументов вызываемых функций printf, scanf и т.п. компилятор обнаружил что аргумент n не является указателем, каким должен быть в соответствии со спецификацией формата.
fprefetch-loop-arrays not supported for this target
Опция генерации команд предварительной выборки из памяти не поддерживается для данного устройства.
function call has aggregate value
Возвращаемое функцией значение является объединением. function declaration isn’t a prototype
При компиляции с опцией -Wstrict-prototypes компилятор предполагает, что для всех функций будут заданы прототипы. В данном случае встретилось определение функции, предшествующее прототипу.
DS51284H(ru) стр. C-26 |
© 2008 Microchip Technology Inc. |
Приложение C Диагностика
function declared ‘noreturn’ has a ‘return’ statement
Функция была объявлена с атрибутом noreturn и поэтому не должна содержать оператор return. Это противоречие.
function might be possible candidate for attribute ‘noreturn’
Компилятор определил, что функция не имеет возврата. Если функция будет объявлена с атрибутом noreturn, компилятор получит возможность сгенерировать лучший код.
function returns address of local variable
Функция не должна возвращать адрес локальной переменной, поскольку после |
|
. |
|
выхода из функции память локальной переменной освобождается. |
|
function returns an aggregate |
A |
Возвращаемое функцией значение является объединением. |
|
Wilson |
function ‘name‘ redeclared as inline previous declaration of function ‘name‘ with attribute noinline
Указанная функция повторно объявлена с ключевым словом inline, что позволяет теперь встраивать ее код.
function ‘name‘ redeclared with attribute noinline previous declaration of function ‘name‘ was inline
Указанная функция повторно объявлена с атрибутом noinline, поэтому теперь ее код не может быть встроен.
function ‘identifier ‘ was previously declared within a block
Указанная функция уже объявленаby непосредственно внутри блока, тем не менее она имеет неявное объявление в текущей строке.
G
GCC does not yet properly implement ‘[*]’ array declarators
МассивыTranslatedпеременного размера на настоящий момент не поддерживаются компилятором.
H
hex escape sequence out of range
Шестнадцатеричная escape последовательность не должна превышать шестнадцатеричное значение 100 (десятичное 256).
I
ignoring m-specifier for non-static local variable ‘identifier ‘
Спецификатор ассемблера игнорируется при использовании с указанной нерегистровой локальной переменной.
ignoring invalid multibyte character
При обнаружении многобайтового символа компилятор определяет его как ошибочный. Ошибочные символы игнорируются.
ignoring option ‘option‘ due to invalid debug level specification
Указанная опция отладки используется запрещенным уровнем отладки.
ignoring #pragma identifier
Указанная прагма не поддерживается компилятором и будет проигнорирована.
imaginary constants are a GCC extention
ISO Си не допускает мнимых числовых констант.
© 2008 Microchip Technology Inc. |
DS51284H(ru) стр. C-27 |
16-битовый компилятор Си. Руководство
implicit declaration of function ‘identifier ‘
Указанная функция не была ранее явно описана (определением или прототипом), поэтому компилятор сделает допущения о типе возвращаемого значения и параметрах.
increment of read-only member ‘name‘
Указанный член был объявлен как const и не может быть модифицирован инкрементом.
increment of read-only variable ‘name‘
Указанная переменная была объявлена как const и не может быть |
|
модифицирована инкрементом. |
. |
initialization of a flexible array member |
A |
Элемент незавершенного массива предназначается для динамического, а не статического размещения.
‘identifier ‘ initialized and declaredWilson‘exter ‘
Указанный идентификатор не должен инициализироваться, т.к. он внешний. initializer element is not constant
Элемент инициализатора должен быть константой. inline function ‘name‘ given attribute noinline
Указанная функция была ранее объявлена inline, но атрибут noinline препятствует в дальнейшем рассматривать ее как встраиваемую.
inlining failed in call to ‘identifier ‘ called from here
Компилятор не смог inline byвстроить указанную функцию. integer constant is so large that it is unsigned
Величина целой константы появилась в исходном коде без явного беззнакового
integer constant is too large for ‘type‘ type
модификатора, но число не может быть представлено как знаковое целое, поэтому компиляторTranslatedбудет автоматически трактовать его как беззнаковое целое.
Целая константа не должна превышать 2^32 – 1 для unsigned long int, 2^63 – 1 для long long int и 2^64 – 1 для unsigned long long int.
integer overflow in expression
При свертывании целого константного выражения компилятор обнаружил переполнение, а это означает, что оно не может быть представлено как целое.
invalid application of ‘sizeof’ to a function type
Не рекомендуется применять оператор sizeof к функциям. inv lid pplication of ‘sizeof’ to a void type
Нельзя применять оператор sizeof к типу void. invalid digit ‘digit’ in octal constant
Все цифры должны быть в пределах основания используемой системы счисления. Например, для восьмеричной системы можно использовать цифры от 0 до 7.
invalid second arg to __builtin_prefetch; using zero
Второй аргумент должен быть 0 или 1.
invalid storage class for function ‘name‘
Для функций, определенных на самом верхнем уровне, нельзя использовать класс памяти auto, а для функций, определенных не на верхнем уровне, нельзя использовать класс памяти static.
DS51284H(ru) стр. C-28 |
© 2008 Microchip Technology Inc. |
Приложение C Диагностика
invalid third arg to __builtin_prefetch; using zero
Третий аргумент должен быть 0, 1, 2 или 3.
‘identifier ‘ is an unrecognized format function type
Указанный идентификатор, использованный в атрибуте форматирования, не является одним из допустимых типов форматов функций printf, scanf или strftime.
‘identifier ‘ is narrower than values of its type
Член структуры, являющийся битовым полем, имеет тип перечисления, но ширина поля не позволяет представить все значения перечисления.
‘storage class‘ is not at beginning of declaration |
||
A |
объявления. Класс памяти |
|
Указанный описатель класса памяти стоит не в начале. |
||
должен быть первым в объявлении. |
||
ISO C does not support complexWilsoninteger types |
||
ISO C does not allow extra ‘;’ outside of a function |
||
Лишняя точка с запятой обнаружена вне функции. Это не разрешается в ISO Си. |
||
ISO C does not support ‘++’ and ‘—‘ |
c mplex types |
Операторы инкремента и декремента не поддерживаются для комплексных типов в ISO Си.
ISO C does not support ‘~’ for comp ex conjugation
Оператор побитовой инверсии не может использоваться для комплексного сопряжения в ISO Си.
by |
short |
int, не |
Целые комплексные типы, как например __complex__ |
||
поддерживаются в ISO Си. |
ISO C does not support plain ‘complex’ meaning ‘double complex’
ISO C does not support the ‘char‘ ‘kind of format ‘ format
Использование complex__ без других модификаторов эквивалентно ‘complex doubleTranslated‘, который не поддерживается в ISO Си.
ISO Си не поддерживает задание указанного символа для указанного формата.
ISO C doesn’t support unnamed structs/unions
Все структуры и/или союзы должны быть поименованы в ISO Си.
ISO C forbids empty source file
Файл не содержит функций или данных. Это запрещается в ISO Си.
ISO C forbids empty initializer braces
ISO Си предполагает наличие значений инициализации внутри фигурных скобок.
ISO C forbids nested functions
Функция была определена внутри другой функции.
ISO C forbids omitting the middle term of a ?: expression
Условное выражение требует наличия среднего члена или выражения между ‘?‘ и ‘:‘.
ISO C forbids qualified void function return type
Нельзя использовать квалификатор типа для функции, не возвращающей значения.
ISO C forbids range expressions in switch statements
ISO Си не позволяет задавать диапазон непрерывных значений в варианте оператора выбора.
ISO C forbids subscripting ‘register’ array
Индексированный регистровый массив запрещен в ISO Си.
© 2008 Microchip Technology Inc. |
DS51284H(ru) стр. C-29 |
16-битовый компилятор Си. Руководство
ISO C forbids taking the address of a label
В ISO Си невозможно получить адрес метки.
ISO C forbids zero-size array ‘name‘
Размер указанного массива должен быть больше нуля.
ISO C restricts enumerator values to range of ‘int’
Диапазон значений перечисления не должен превышать диапазона целого типа.
ISO C89 forbids compound literals |
||
В ISO C89 запрещены сложные литералы. |
. |
|
ISO C89 forbids mixed declarations and code |
||
A |
||
Объявления должны быть сделаны до написания какого-либо кода. Они не должны |
||
смешиваться с кодом. |
||
ISO C90 does not support ‘[*]’ array declarators |
||
Wilson |
||
Массивы переменного размера не поддерживаются в ISO C90. |
||
ISO C90 does not support complex types |
Комплексные типы, такие как __complex__ float x, не поддерживаются в ISO C90.
ISO C90 does not support flexible array members
Незавершенный тип массива является новой возможностью в C99. ISO C90 его не поддерживает.
ISO C90 does not support ‘long long’
Тип long long не поддерживается в ISO C90.
ISO C90 does not support ‘static’ or type qualifiers in parameter array declarators |
|
Когда массив используется в качестве параметра функции, ISO C90 не разрешает |
|
применять для его объявленияby |
static и квалификаторы типа. |
Translated |
ISO C90 does not support the ‘char ‘ ‘function‘ format
ISO Си не поддерживает указанный символ в спецификации формата указанной функции.
ISO C90 does not support the ‘modifier ‘ ‘function‘ length modifier
Указанный модификатор не поддерживается для объявления длины типа указанной функции.
ISO C90 forbids variable-size array ‘name‘
В ISO C90 количество элементов массива должно быть задано целым константным выражением.
L
label ‘identifier ‘ defined but not used
Указанная метка была определена, но ссылки на нее не было. large integer implicitly truncated to unsigned type
Значение целой константы, появившееся в исходном коде без явного указания беззнакового модификатора, в случае, когда оно не может быть представлено знаковым целым, автоматически трактуется компилятором как беззнаковое целое.
left-hand operand of comma expression has no effect
Один из операндов операции сравнения является расширением побитовой инверсии беззнакового значения, а другой — просто беззнаковым.
DS51284H(ru) стр. C-30 |
© 2008 Microchip Technology Inc. |
Приложение C Диагностика
left shift count >= width of type
Счетчик сдвига должен быть меньше, чем количество битов в сдвигаемом типе. В противном случае сдвиг становится бессмысленным, а результат неопределенным.
left shift count is negative
Счетчик сдвига должен быть положительным. Отрицательный счетчик не означает сдвига вправо, он просто не имеет смысла.
library function ‘identifier ‘ declared as non-function
Указанная функция имеет то же имя, что и библиотечная, в добавок объявляется как нечто другое, а не функция.
line number out of range |
A |
|||
Ограничение на номер строки в директиве |
составляет 32767 в C89 и |
|||
#line. |
||||
2147483647 в C99. |
Wilson |
|||
M |
||||
‘identifier ‘ locally external but globally static |
Указанный идентификатор является локально внешним, но глобально статическим. Это подозрительно.
location qualifier ‘qualifier ‘ ignored
Квалификаторы размещения, включая ‘gpr‘ и ‘sfr‘, не используются в компиляторе, но могут присутствовать для совместимости с MPLAB Си компилятором для PIC18.
‘long’ switch expression not converted to ‘int’ in ISO C
ISO Си не преобразует выражение в операторе выбора из long в int.
‘main’ is usually a functionby
Идентификатор main обычно используется для обозначения главной точки входа в программу. Компилятор обнаружил, что он был использован другим способом,
например, для обозначения имени переменной..
Указатель неявно преобразован в целое.
‘operationTranslated‘ makes integer from pointer without a cast
‘operation‘ makes pointer from integer without a cast
Целое неявно преобразовано в указатель. malformed ‘#pr gma pack-ignored’
Ошибочный синтаксис прагмы.
malformed ‘#pragma pack(pop[,id])-ignored’
Ошибочный синтаксис прагмы.
malformed ‘#pragma pack(push[,id],<n>)-ignored’
Ошибочный синтаксис прагмы. malfo med ‘#pragma weak-ignored’
Ошибочный синтаксис прагмы.
‘identifier ‘ might be used uninitialized in this function
Компилятор обнаружил передачу управления функции, которая возможно использует указанный идентификатор до того, как он был инициализирован.
missing braces around initializer
Пропущены необходимые вокруг инициализатора фигурные скобки.
missing initializer
Пропущен инициализатор.
© 2008 Microchip Technology Inc. |
DS51284H(ru) стр. C-31 |
16-битовый компилятор Си. Руководство
modification by ‘asm’ of read-only variable ‘identifier ‘
Константная переменная находится в левой части операции присваивания в операторе ассемблера.
multi-character character constant
Указанная символьная константа содержит более одного символа.
N
negative integer implicitly converted to unsigned type
Отрицательная целая константа обнаружена в исходном коде, но число не может
nested extern declaration of ‘identifier ‘ |
. |
|
Для указанного идентификатора обнаружены вложенныеA |
внешние определения. |
|
no newline at end of file |
||
Последняя строка исходного файла не заканчивается символом новой строки. |
быть представлено как целое со знаком, поэтому компилятор автоматически трактует ее как беззнаковую целую.
В данном случае обнаружено определениеWilson функции без предшествующего ему объявления.
no previous declaration for ‘identifier ‘
При компиляции с опцией командной строки -Wmissing-declarations
компилятор ожидает, что функции объявляются до того, как они будут определены.
no previous prototype for ‘identifier ‘
При компиляции с опцией командной строки -Wmissing-prototypes компилятор ожидает, что прототипы функцийby определяются для всех функций. В данном случае обнаружено определение функции без предшествующего ему прототипа.
no semicolon at end of struct or union
Пропуск точки с запятой в конце объявления структуры или союза.
non-ISO-standard escape sequence, ‘seq‘
nonTranslated-static decl tion for ‘identifier ‘ follows static
Указанная последовательность ‘e’ или ‘E’ является расширением стандарта ISO. Последовательность может быть использована в строковой или символьной константе и заменяет ASCII символ <ESC>.
Указанный идентификатор был объявлен сначала как static, а теперь объявлен как не static.
‘noreturn’ function does return
Функция, объявленная с атрибутом noreturn делает возврат. Это нелогично.
‘noreturn’ function returns non-void value
Функция, объявленная с атрибутом noreturn делает возврат. Это нелогично. null format string
При проверке списка аргументов вызова printf, scanf и т.п. компилятор обнаружил отсутствие строки форматирования.
O
octal escape sequence out of range
Восьмеричная escape последовательность должна быть меньше восьмеричного числа 400 (или десятичного 256).
output constraint ‘constraint ‘ for operand n is not at the beginning
Указанные выходные ограничения (уточнения) в расширенной форма оператора asm должны быть в начале.
DS51284H(ru) стр. C-32 |
© 2008 Microchip Technology Inc. |
Приложение C Диагностика
overflow in constant expression
Константное выражение превысило пределы диапазона представляемых величин для своего типа.
overflow in implicit constant conversion
Неявное преобразование константы дает число, которое не может быть представлено как целое со знаком, т.е. компилятор автоматически будет трактовать его, как целое без знака.
P
parameter ‘identifier ‘ points to incomplete type
parameter has incomplete type |
|
Параметр функции имеет незавершенный тип. |
|
parameter names (without types) in function declaration. |
|
Объявление функции использует список параметровA |
без их типов. |
parameter points to incomplete type |
|
Параметр функции указывает на незавершенный тип. |
|
Wilson |
Указанный параметр функции указывает на незавершенный тип.
passing arg ‘number ‘ of ‘name‘ as complex rather than floating due to prototype
В прототипе указанной функции аргумент с указанным номером определяется как complex, но используется значение типа float, поэтому компилятор преобразует его в complex в соответствии с прототипом.
passing arg ‘number ‘ of ‘name‘ as complex rather than integer due to prototype
В прототипе указанной функцииby аргумент с указанным номером определяется как complex, но используется значение типа integer, поэтому компилятор преобразует его в complex в соответствии с прототипом.
passing arg ‘number ‘ of ‘name‘ as floating rather than complex due to prototype
его во float в соответствии с прототипом.
В Translatedпрототипе указанной функции аргумент с указанным номером определяется как float, но используется значение типа complex, поэтому компилятор преобразует
passing arg ‘number ‘ of ‘name‘ as ‘float’ rather than ‘double’ due to prototype
В прототипе указанной функции аргумент с указанным номером определяется как float, но используется значение типа double, поэтому компилятор преобразует его во float в соответствии с прототипом.
passing arg ‘number ‘ of ‘name‘ as floating rather than integer due to prototype
В прототипе указанной функции аргумент с указанным номером определяется как flo , но используется значение целого типа, поэтому компилятор преобразует его во flo t в соответствии с прототипом.
passing arg ‘number ‘ of ‘name‘ as integer rather than complex due to prototype
В прототипе указанной функции аргумент с указанным номером определяется как целого типа, но используется значение типа complex, поэтому компилятор преобразует его в целое в соответствии с прототипом.
passing arg ‘number ‘ of ‘name‘ as integer rather than floating due to prototype
В прототипе указанной функции аргумент с указанным номером определяется как целого типа, но используется значение типа float, поэтому компилятор преобразует его в целое в соответствии с прототипом.
pointer of type ‘void *’ used in arithmetic
Указатель на тип void не имеет размера и не должен использоваться в арифметическом выражении.
© 2008 Microchip Technology Inc. |
DS51284H(ru) стр. C-33 |
16-битовый компилятор Си. Руководство
pointer to a function used in arithmetic
Указатель на функцию не должен использоваться в арифметическом выражении.
previous declaration of ‘identifier ‘
Данное предупреждение появляется вместе с другим предупреждением, которое определяет положение подозрительного кода. Данное сообщение указывает на первое объявление или определение указанного идентификатора.
previous implicit declaration of ‘identifier ‘
Данное предупреждение появляется совместно с предупреждением «type mismatch with previous implicit declaration». Оно определяет положение неявного объявления идентификатора, конфликтующего с явным объявлением.
R |
. |
«name» re-asserted |
A |
Повторный ответ (в директиве #assert) для указанного имени. |
|
«name» redefined |
|
Указанное имя было определено ранее и переопределяется здесь. |
|
redefinition of ‘identifier ‘ |
Wilson |
Указанный идентификатор имеет многократные несовместимые определения. |
redundant redeclaration of ‘ident f er ‘ in same scope
Указанный идентификатор был снова объявлен в той же области действия. Это излишне.
register used for two global register variables |
||
by |
||
Две глобальных регистровых переменных определены с использованием одного и |
||
того же регистра. |
||
repeated ‘flag‘ flag in format |
||
Translated |
компилятор нашел |
|
При проверке списка аргументов вызова strftime |
||
повторяющийся флаг в строке форматирования. |
||
При проверке списка аргументов вызова prinf, scanf |
и т.п. компилятор |
обнаружил, что один из флагов { ,+,#,0,–} в строке форматирования повторяется. return-type defaul s to ‘int’
При отсутствии явного задания типа возвращаемого функцией значения, компилятор предполагает, что функция возвращает величину типа int.
return type of ‘name‘ is not ‘int’
Компилятор предполагает, что возвращаемое значение для указанной функции будет i .
‘return’ with a value, in function returning void
Функция была объявлена, как void, но возвращает значение.
‘return’ with no value, in function returning non-void
Функция, объявленная как возвращающая непустое значение, содержит оператор возврата без значения. Это нелогично.
right shift count >= width of type
Счетчик сдвига должен быть меньше, чем количество битов в сдвигаемом типе. В противном случае сдвиг становится бессмысленным, а результат неопределенным.
right shift count is negative
Счетчик сдвига должен быть положительным. Отрицательный счетчик не означает сдвига влево, он просто не имеет смысла.
DS51284H(ru) стр. C-34 |
© 2008 Microchip Technology Inc. |
shift count is negative
Приложение C Диагностика
S
second argument of ‘identifier ‘ should be ‘char **’
Предположительно, второй аргумент указанного идентификатора должен быть типа char **.
second parameter of ‘va_start’ not last named argument
Второй параметр va_start должен быть последним именованным аргументом.
shadowing built-in function ‘identifier ‘
Указанная функция имеет то же имя, что и встроенная функция и, следовательно,
будет «затенять» эту функцию. |
. |
shadowing library function ‘identifier ‘ |
|
Указанная функция имеет то же имя, что и библиотечная функция и, следовательно, |
|
будет «затенять» эту функцию. |
A |
влево не означает сдвига вправо,Wilsonтакже как и при сдвиге вправо, он не означает сдвига влево, он просто не имеет смысла.
shift count >= width of type
Счетчик сдвига должен быть меньше, чем количество битов в сдвигаемом типе. В
противном случае сдвиг становится бессмысленным, а результат неопределенным.
Счетчик сдвига должен быть положительным. Отрицательный счетчик при сдвиге
size of ‘name‘ is larger than n bytes
Использование опции -Wlarger-than-len будет приводить к выводу такого by
предупреждения, когда размер указанной переменной превысит указанное количество байтов.
size of ‘identifier ‘ is n ytes
size of return value of ‘name‘ is larger than n bytes
Размер указанной переменной, который составляет указанное количество байтов, превышаетTranslatedзаданную опцией -Wlarger-than-len величину.
Использование опции -Wlarger-than-len будет приводить к выводу такого предупреждения, когда размер возвращаемого указанной функцией значения превысит указанное количество байтов.
size of return value of ‘identifier ‘ is n bytes
Размер возвращаемого указанной функцией значения, который составляет указанное количество байтов, превышает заданную опцией -Wlarger-than-len величину.
spurious trailing ‘%’ in format
При проверке списка аргументов вызова printf, scanf и т.п. компилятор обнаружил ложный замыкающий символ ‘%‘ в строке форматирования.
statement with no effect
Нерабочий оператор.
static declaration for ‘identifier ‘ follows non-static
Указанный идентификатор объявлен как static, а ранее он был объявлен как не static.
string length ‘n‘ is greater than the length ‘n‘ ISO Cn compilers are required to support
Максимальная длина строки в ISO C89 — 509. Максимальная длина строки в ISO C99 — 4095.
© 2008 Microchip Technology Inc. |
DS51284H(ru) стр. C-35 |
subscript has type ‘char’
Индекс массива имеет тип
16-битовый компилятор Си. Руководство
‘struct identifier ‘ declared inside parameter list
Указанная структура объявлена в списке параметров функции. Обычно лучшей практикой программирования считается объявление структур вне списка параметров, поскольку они никогда не могут стать завершенными типами, будучи объявлены в списке параметров.
struct has no members
Пустая структура, отсутствуют члены.
structure defined inside parms
Структура определяется внутри списка параметров функции.
style of line directive is a GCC extension |
||
Используйте формат ‘#line linenum‘ в традиционном. |
Си. |
|
A |
suggest explicit braces to avoid ambiguous ‘else’
Вложенный оператор if имеет неоднозначное продолжение else. Рекомендуется использовать фигурные скобки для ликвидации двусмысленности.
suggest hiding #directive from traditional C with an indented #
Указанная директива не принадлежит к традиционному Си и может быть скрыта (hidden) отступом символа #. Директива игнорируется, если ее символ # не на первой позиции в строке.
suggest not using #elif in traditional C
char.Wilson
#elif не должна использоватьсяby в традиционном Си по Кернигану и Ритчи. suggest parentheses around assignment used as truth value
Когда присвоение используется как истинное значение, его следует заключить в
suggest parenth s around && within ||
простые скобки, с целью сделать понятным при чтении исходной программы. suggestTranslatedparentheses around + or — inside shift
suggest parenth s s around arithmetic in operand of | suggest paren heses around comparison in operand of | suggest parentheses around arithmetic in operand of ^ suggest parentheses around comparison in operand of ^ suggest parentheses around + or — in operand of & suggest parentheses around comparison in operand of &
Хотя в Си приоритет операторов четко определен, но иногда читателю выражения, возможно, потребуется потратить дополнительно несколько микросекунд для понимания порядка вычисления операндов в выражениях, если читатель должен полагаться исключительно на приоритет правил, без помощи явно заданных скобок. Примером этого является использование операций «+» или «–» внутри сдвига. Многие читатели будут избавлены от лишних усилий, если использование скобок ясно выразит намерение программиста, даже если эти намерения являются однозначными для программиста и компилятора.
T
‘identifier ‘ takes only zero or two arguments
Ожидается ноль или только два аргумента.
the meaning of ‘a’ is different in traditional C
Когда используется опция -wtraditional, escape последовательность ‘a‘ не распознается как метасимвол, ее значение будет просто ‘a’. В нетрадиционном Си ‘a‘ представляет собой ASCII символ BEL.
DS51284H(ru) стр. C-36 |
© 2008 Microchip Technology Inc. |
too many arguments for format
too few arguments for format
Приложение C Диагностика
the meaning of ‘x’ is different in traditional C
Когда используется опция -wtraditional, escape последовательность ‘x‘ не распознается как метасимвол, ее значение будет просто ‘x’. В нетрадиционном Си ‘x‘ представляет собой начало шестнадцатеричной escape последовательности.
third argument of ‘identifier ‘ should probably be ‘char **’
Предположительно, третий аргумент указанного идентификатора должен быть типа char **.
this function may return with or without a value
Все пути выхода |
из функции типа, отличного от |
void, должны возвращать |
|
соответствующее |
. |
вариант, когда подобная |
|
значение. Компилятор обнаружил |
|||
A |
|||
функция завершается иногда с, а иногда и без явного возврата величины. Таким |
|||
образом, возвращенное значение может быть непредсказуемым. |
|||
this target machine does not have delayed branches |
|||
Wilson |
|||
Опция -fdelayed-branch не поддерживается. |
При проверке списка аргументов вызова printf, scanf и т.п. компилятор обнаружил, что фактическое число аргументов меньше, чем требует строка форматирования.
При проверке списка аргументов вызова printf, scanf и т.п. компилятор обнаружил, что фактическое число аргументов больше, чем требует строка
traditional C ignores #’directive‘ with the # indented
Традиционно директива игнорируется, если начинается с символа #, стоящего на на первой позиции в строке.
traditionalTranslatedC rejects initialization of unions
Союзы не могут инициализироваться в традиционном Си. traditional C rejects the ‘ul’ suffix
Суффикс ‘u‘ не разрешается в традиционном Си. traditional C rejects the unary plus operator
Унарный плюс запрещен в традиционном Си. trigraph ??char converted to char
Триграфы, которые представляют собой трехсимвольные последовательности, могут использоваться для представления символов, отсутствующих на клавиатуре. Триграфы преобразуются следующим образом:
??( = [ ??) = ] ??< = { ??> = } ??= = # ??/ = ??’ = ^ ??! = | ??- = ~
trigraph ??char ignored
Триграф игнорируется. Указанный символ должен быть одним из: (, ), <, >, =, /, ‘, !, или –.
type defaults to ‘int’ in declaration of ‘identifier ‘
Из-за отсутствия явного объявления типа для указанного идентификатора компилятор предполагает, что его тип int.
type mismatch with previous external decl previous external decl of ‘identifier ‘
Тип указанного идентификатора не соответствует предыдущему объявлению.
© 2008 Microchip Technology Inc. |
DS51284H(ru) стр. C-37 |
16-битовый компилятор Си. Руководство
type mismatch with previous implicit declaration
Явное объявление конфликтует с предыдущим неявным объявлением.
type of ‘identifier ‘ defaults to ‘int’
Из-за отсутствия явного объявления типа для указанного идентификатора компилятор предполагает, что его тип int.
type qualifiers ignored on function return type
Квалификатор, использованный для типа возвращаемого функцией значения, игнорируется.
defined не может быть использовано в качестве имени макроса и не должно |
|
переопределяться. |
A |
undefining ‘name‘
Директива #undef использована для определенного ранее макроса с указанным именем.
union cannot be made transparent
Атрибут transparent_union был использован для союза, но заданная переменная не соответствует требованиям этого атрибута.
‘union identifier ‘ declared inside parameter list
Указанный союз объявлен в списке параметров функции. Обычно лучшей практикой |
|
программирования считается |
Wilsonобъявление союзов вне списка параметров, |
by |
поскольку они никогда не могут стать завершенными типами, будучи объявлены в списке параметров.
union defined inside parms
Союз пустой, члены отсутствуют.
Союз объявлен внутри списка параметров функции. unionTranslatedhas no members
unknown conversion type character ‘character‘ in format
При проверке списка аргументов вызова printf, scanf и т.п. компилятор обнаружил запрещенный (нераспознаваемый) символ преобразования в строке форматирования
unknown conversion type character 0xnumber in format
При проверке списка аргументов вызова printf, scanf и т.п. компилятор обнаружил, запрещенный (нераспознаваемый) символ преобразования в строке форматирования
unknown escape sequence ‘sequence‘
Указанная escape последовательность недопустима. Escape последовательность должна начинаться с символа » и использовать следующие символы: n, t, b, r, f, b, , ‘, «, a, ?, а также восьмеричное или шестнадцатеричное число. Восьмеричное число должно быть меньше восьмеричного значения 400. Шестнадцатеричное число должно начинаться на ‘x’ и должно быть меньше шестнадцатеричного значения 100.
unnamed struct/union that defines no instances
Неименованная и пустая структура или союз.
unreachable code at beginning of identifier
В начале указанной функции обнаружен недоступный код.
unrecognized gcc debugging option: char
Указанный символ является запрещенной буквой для опции отладки вида -dбуквы.
DS51284H(ru) стр. C-38 |
© 2008 Microchip Technology Inc. |
Приложение C Диагностика
unused parameter ‘identifier ‘
Указанный параметр функции не используется функцией.
unused variable ‘name‘
Указанная переменная была объявлена но не использовалась.
use of ‘*’ and ‘flag’ together in format
При проверке списка аргументов вызова printf, scanf и т.п. компилятор обнаружил в строке форматирования сразу флаг и ‘*‘.
use of C99 long long integer constants
Целая константа типа long long не может быть объявлена в ISO C89.
Указанное имя запрещено с указанной спецификацией преобразования в формате указанной функции.
use of ‘length‘ length modifier with ‘type‘ type character |
|||
. |
и т.п. компилятор |
||
При проверке списка аргументов вызова printf, scanf |
|||
обнаружил, что указанная длина неправильно используетсяA |
с указанным типом. |
||
‘name‘ used but never defined |
|||
Указанная функция используется, но нигде не определена. |
|||
‘name‘ used with ‘spec‘ ‘function‘ format |
|||
Wilson |
useless keyword or type name n empty declaration
Пустое объявление содержит неиспользуемое ключевое слово или название типа.
V
__VA_ARGS__ can only appearby in the expansion of a C99 variadic macro
Предопределенный макрос __VA_ARGS должен использоваться только в заменяемой части макроопределения, использующего произвольное число параметров.
valueTranslatedcomputed is not used
Вычисленное значение не используется. variable ‘name‘ clar d ‘inline’
Ключевое слов inline должно использоваться только с функциями. variable ‘%s’ might be clobbered by ‘longjmp’ or ‘vfork’
Автоматическая переменная не определенная как volatile может быть изменена вызовом ongjmp. Это предупреждение возможно только при компиляции с оптимизацией.
volatile register variables don’t work as you might wish
Передача переменной в качестве аргумента может привести к передаче ее через регистр (w0-w7) отличный от того, что был определен (если не w0-w7) для передачи. Или компилятор может сгенерировать команду, которая не работает с данным регистром и может потребоваться временное перемещение значения в другое место. Это предупреждение выдается, если используемый регистр модифицируется асинхронно (т.е. посредством ISR).
W
-Wformat-extra-args ignored without -Wformat
Опция -Wformat должна быть задана, чтобы использовать -Wformat-extra-args.
-Wformat-nonliteral ignored without -Wformat
Опция -Wformat должна быть задана, чтобы использовать -Wformat-nonliteral
-Wformat-security ignored without -Wformat
Опция -Wformat должна быть задана, чтобы использовать -Wformat-security.
© 2008 Microchip Technology Inc. |
DS51284H(ru) стр. C-39 |
16-битовый компилятор Си. Руководство
-Wformat-y2k ignored without -Wformat
Опция -Wformat должна быть задана, чтобы использовать -Wformat-y2k
-Wid-clash-LEN is no longer supported
Опция -Wid-clash-LEN больше не поддерживается.
-Wmissing-format-attribute ignored without -Wformat
Опция -Wformat должна быть задана, чтобы использовать
-Wmissing-format-attribute.
-Wuninitialized is not supported without -O
‘identifier ‘ was declared ‘extern’ and later ‘static’
Для использования опции -Wuninitialized должна. быть включена оптимизация.
Указанный идентификатор был ранее объявлен как extern, а теперь объявляется |
||
как static. |
Wilson |
A |
d later ‘static’ |
||
‘identifier ‘ was declared implicitly ‘exter ‘ a |
Указанный идентификатор был ранее неявно объявлен как extern, а теперь объявляется как static.
‘identifier ‘ was previously implicitly declared to return ‘int’
Это несоответствие с предыдущим неявным объявлением указанного идентификатора.
‘identifier ‘ was used with no declaration before its definition
При компиляции с опцией командной строки -Wmissing-declarations
компилятор гарантирует, что функция будет объявлена перед определением. В by
данном случае встретилось определение функции без предварительного объявления.
‘identifier ‘ was used with no prototype before its definition
При компиляции с опцией командной строки -Wmissing-prototypes компилятор гарантирует,Translatedчто прототипы будут заданы для всех функций. В данном случае
встретился вызов функции без предварительного прототипа вызываемой функции. writing into constant object (arg n)
При проверке списка аргументов вызова printf, scanf и т.п. компилятор обнаружил, что аргумент с указанным номером является константным объектом, для которого спецификатор формата требует записи в него.
Z
zero-length identifier format string
При проверке списка аргументов вызова printf, scanf и т.п. компилятор обнаружил пустую строку форматирования («»).
DS51284H(ru) стр. C-40 |
© 2008 Microchip Technology Inc. |
Соседние файлы в папке Микропроцессорная техника Сторожок
- #
20.02.20161.22 Кб20dig filtr.c
- #
20.02.20164.68 Кб20digital_filtr.X.production.hex
- #
- #
- #
20.02.20162.48 Кб21main.c
- #
- #
20.02.2016830 б19pic33_rs_1.c
- #
20.02.20164.38 Кб23pic33_TM_RS.X.production.hex
- #
20.02.201693.68 Кб23RC Filtr.DSN
- #
20.02.20164.27 Кб20RC Filtr.pdsprj.GERONT-PC.anton_000.workspace
- #
20.02.20161.29 Кб19RC Filtr.pdsprj.MICROSOF-53D8EF.Admin.workspace
Мне нужно прочитать неизвестное количество различных чисел на входе пользователя с помощью функции scanf
. Это просто означает, что количество различных целых чисел определяется пользователем, отправляя как можно больше чисел. Обратите внимание, что я читаю непосредственно числа (я должен), как указано в следующем коде:
int main(void)
{
int numbers[];
int error = 0;
int i = 0;
while(scanf("%i", &numbers[i++]) == 1);
for(int i = 0; i < sizeof(numbers) - 1; ++i) {
if(numbers[i] < -10000 || numbers[i] > 10000)
{
printf("%i%s", numbers[i], ", ");
}
else
{
printf("%s", "bbnError: Error: Vstup je mimo interval!n");
// Means "Input is out of range!".
// We have to write exact output to terminal as stated in HW.
i = sizeof(numbers);
error = 1;
}
}
...
}
int error
на самом деле является логическим значением, но мне лень реализовывать логическую библиотеку, поэтому я определяю его как целое число: D
Однако проблема в другом. Компилятор выдает ошибку:
main.c:7:9: error: array size missing in ‘numbers’
int numbers[];
^
Похоже, этой программе на C нужно знать размер массива, который можно выделить. Я уже просмотрел некоторые коды, которыми там поделились другие, чтобы узнать основы, которые мне нужно реализовать, и, ища проблему с размером массива, я нашел этот вопрос:
C — Объявление массива с неопределенным значением
Однако это не решает проблемы с неизвестным размером массива при прямом вводе неизвестного количества чисел. Я не нашел, что именно нужно решать. Я попытался определить максимальный размер массива для хранения до 999 чисел, но затем компилятор выдает мне это исключение:
main.c:50:23: error: iteration 999u invokes undefined behavior [-Werror=aggressive-loop-optimizations]
if(numbers[j] > 0)
^
main.c:48:9: note: containing loop
for(int j = 0; j < sizeof(numbers); ++j)
^
То же самое для каждого цикла, используемого для статистики чисел (общая сумма, максимум, минимум, шансы, равные, положительные, отрицательные, их процентное и среднее значение). Это означает, что размер массива строго равен 999 числам, а остальные числа являются нулями. Я обнаружил функцию malloc
, но не понимаю, как она используется
3 ответа
Лучший ответ
«Мне нужно прочитать неизвестное количество различных чисел при вводе пользователем с помощью функции scanf». это плохая цель дизайна.
Любая программа, которая позволяет внешнему интерфейсу вводить любой объем ввода без ограничений, является хакерским эксплойтом.
Надежный код ограничивает ввод пользователя большим, но разумным объемом ввода. Хороший код кодирует эту верхнюю границу как константу или макрос.
Использование scanf()
— не лучший инструмент для чтения пользовательского ввода.
Рекомендую fgets()
прочитать строку . (Здесь не показано.)
#include <stdio.h>
#include <ctype.h>
// find the next character without consuming it.
int peek_ch(void) {
unsigned char ch;
if (scanf("%c", &ch) == 1) {
ungetc(ch, stdin);
return ch;
}
return EOF;
}
#define INPUT_N 1000
void foo(void) {
int input[INPUT_N];
size_t n = 0;
// Read 1 _line_ of input using `scanf("%d", ....)` to read one `int` at a time
for (n = 0; n < INPUT_N; n++) {
int ch;
while (((ch = peek_ch()) != 'n') && isspace(ch))
;
// %d consume leading white-space including n, hence the above code to find it.
if (scanf("%d", &input[n]) != 1) {
break;
}
}
// TBD: Add code to handle case when n == N
for (size_t i = 0; i < n; i++) {
printf("%zu: %dn", i, input[i]);
}
}
1
chux — Reinstate Monica
22 Окт 2016 в 19:53
Основываясь на вашем описании в комментариях, вам придется динамически выделять память с помощью malloc
и при необходимости расширять ее с помощью realloc
.
Вот базовый скелет примера:
#define INITIAL_SIZE 1024
#include <stdlib.h>
#include <stdio.h>
int main( void )
{
size_t arraySize = 0;
size_t i = 0;
// initially allocate numbers array
int *numbers = malloc( sizeof *numbers * INITIAL_SIZE );
if ( !numbers )
{
fprintf( stderr, "Error allocating memory...exitingn" );
exit( EXIT_FAILURE );
}
arraySize = INITIAL_SIZE;
int input;
while ( scanf( "%d", &input ) == 1 )
{
if ( i == arraySize )
{
// double the size of the numbers array
int *tmp = realloc( numbers, sizeof *numbers * (2 * arraySize) );
if ( !tmp )
{
fprintf( stderr, "Could not extend array size...no more inputs allowedn" );
break;
}
numbers = tmp;
arraySize *= 2;
}
numbers[i++] = input;
}
// process numbers
...
// clean up after ourselves
free( numbers );
0
John Bode
22 Окт 2016 в 20:49
Спасибо всем за вашу помощь, я очень ценю это. Это помогло мне, хотя на самом деле мне было нужно не это одно решение, а немного другое. Как указано в комментарии выше, мне нужно было только выполнить требования к вводу и выводу домашнего задания. Я связался со своим профессором, и он предложил мне избавиться от целочисленного массива и заключить вывод списка исходных чисел и весь прогресс вычислений в цикл while
. Окончательный расчет для процентного и среднего суммирования затем завершается проверкой условий if
, если ошибка не произошла, завершается со всем окончательным выводом. Это, однако, не будет отмечаться как решающий ответ, поскольку здесь мне это очень помогло. Но я отметил, что ответ от chux очень логичен и любая программа должна быть защищена от вредоносных программ путем переполнения буфера. Еще раз спасибо всем за вашу помощь, я очень ценю это
0
Polda18
22 Окт 2016 в 21:24
C Programming for Beginners : Length of an Array
Length of an Array
It helps us write the if-else statement in just one line ✌️
Traditional if-else Statement Syntax
if-else Statement with Ternary Operator
Example
Let’s just say we want to compare two numbers and print the number which is the greater one.
Now, we could do the same thing within just one line like this :
Or if you wanted to print it rather than returning it, write like this :
This looks so cool 😃
Let’s now implement this into an actual program.
Sizes
Each of the data types consumes a particular set of memory. For example, the int data has a size of 4 bytes of memory.
We can print the size of each of each of the data types by using the sizeof() function.
There is also a specific range of values for each data type.
(This can be vary for different compilers)
Details are listed below in the program in form of comments.
Length of an Array
We know that char type takes 1 byte of memory.
Let’s try a string array.
It gave us an error saying the array size is missing.
Let’s set the size this time.
So we get to choose the size of an array.
Let’s store a string of 3 letters within this array and check whether it prints 3 of 5.
Lets store another string. But this time we won’t specify the size within those brackets.
It gives 4. But it should give 3 right ?
Don’t worry. We can use this feature ✌️
Moral of the story : The size of array depends on the number within those squared brackets or the value stored within it.
So the size is done. Now what about the length ?
The length of the above the above is 4(cuz there are three letters). And the size is 4 too.
For a string array, the length is same as the array size. But can be different for other types of arrays. For example an integer array.
But wait what’s an integer array ?
Like a string array is a set of chars; an int array is a set of integers.
The set is created with curly brackets.
Note : Do not forget to specify the data type of the array as int.
We can see the length of this array is 3 as it has three numbers.
But is the size same ?
No. The size is 12 because each integers holds 4 bytes and there are 3 integers.
So 4 times 3 is 12.
In case of string array, the size was the same the length because the string is a set of chars. And a char takes 1 byte of memory.
So how can we print the length of the integer array ?
Simple! We divide the size of array (12) with the size of first element (4). So we get three.
The size of the first element of the array is 4 cuz it is an integer type.
This is how we can get access to the elements of the array.
Источник
Ошибка размеров массива в C [дубликат]
Я написал программу для выполнения следующих задач: сначала получить строку от пользователя и вычислить ее размер с помощью функции sizeof(). Вот мой код:
Ошибка компиляции: error: array size missing in ‘U1’ Почему ? Объясните, пожалуйста, что здесь не так?
задан 17 сен ’13, 13:09
вам нужно выделить память для массива символов. — Bill
5 ответы
Вам нужно определить размер массива, чтобы сообщить компилятору, сколько места нужно выделить:
Если вы не знаете размер своего массива во время компиляции, вы можете динамически выделить память, используя malloc :
Внимание
всегда будет печатать 256, так как sizeof возвращает размер массива, вычтенный во время компиляции, а не количество символов, только что считанных в массив. Вы могли бы использовать sizeof(char) * (strlen(U1) + 1) для вычисления количества байтов, требуемых строкой (+1 происходит от символа NUL-терминатора в конце строки).
Массивы C имеют фиксированную длину, поэтому размер каждого массива должен быть полностью указан при его объявлении. Правильное объявление выглядит примерно так:
Обратите внимание, что если пользователь вводит больше указанного количества символов (минус один для завершающего нуля), поведение этой программы не определено. Чтобы избежать этой проблемы, замените scanf(«%s») с fgets() и узнать о динамические массивы.
ответ дан 23 мая ’17, 12:05
Нет, если вы введете 257-байтовую строку, она будет переполнена. Я прав ? Как я могу предотвратить это? — InJecTable
@InJecTable Даже если вы введете 256-байтовую строку, она переполнит массив, потому что строки C заканчиваются нулевым символом. Чтобы этого избежать, замените один scanf с несколькими звонками в fgets и используйте динамически выделяемый массив, как указано в ответе. — user4815162342
Массивы в C должны быть объявлены с указанием размера. Другой вариант — использовать динамические массивы, которые являются указателями.
Источник
Что означает ошибка RangeError: Array size is not a small enough positive integer
Когда попытался создать слишком большой массив
Ситуация. К разработчику одной федеральной торговой сети поступила такая задача: собрать и предварительно обработать все покупки за месяц со всех магазинов по всей стране. Разработчик выяснил стандартный среднемесячный объём данных, количество магазинов, сколько касс в магазине и количество смен.
Для обработки данных разработчик создаёт пустой массив, но хочет заранее указать, сколько элементов будет в массиве. Для этого он получает общее значение данных для обработки и объявляет новую переменную с массивом:
Но при запуске код выдаёт ошибку:
❌ RangeError: Array size is not a small enough positive integer
Видно, что код ругается на размер массива, но не ругается на результат умножения — но почему?
Что это значит: компьютер не смог создать массив с таким большим количеством элементов и попросил уменьшить их количество.
Когда встречается: когда мы пытаемся создать массив, где элементов больше, чем 2 32 − 1 = 4 294 967 295. Такое ограничение на размер массива появилось в 2009 году из-за внутренней команды ToUint32() — она переводит числа в 32-битный формат без использования отрицательных чисел. Максимальное число, которое попадает в этот диапазон, — 4 294 967 295.
Что делать с ошибкой RangeError: Array size is not a small enough positive integer
Решить эту ошибку можно двумя способами: указав безопасное количество элементов вручную или проверив его перед созданием массива.
В первом случае всё просто: мы создаём новый массив и сразу указываем максимальное количество элементов:
var data = new Array(4294967295);
Во втором — проверяем допустимый размер перед созданием:
Но почему компьютер не ругался на промежуточный результат?
Когда мы перемножили числа и положили результат в переменную total, к нему применялись совсем другие требования, в том числе и на максимальный размер числа — 2 1024 − 1. Это в 32 раза больше, чем максимально возможное количество элементов массива.
Получается, что очень большую переменную мы посчитать можем, а использовать её для создания массива — нет. А если интересно, как можно работать в JavaScript с очень большими числами, — почитайте, как мы научили компьютер складывать в столбик.
Источник
Сообщения об ошибках Сообщения об ошибках периода компиляции
«,» expected (Нужно указать «,»).
Array bounds missing «]» (Массив ограничивает отсутствие «]»).
Array must have at least one element (Массив должен иметь по крайней мере один элемент).
Call of nonfunction (Нефункциональное обращение).
Call to function ‘function’ with no prototype (Обращение к функции «функция» без прототипа).
Code has no effect (Код не имеет эффекта).
Compound statement missing «>» (Утверждение, пропускающее «>»).
Declaration is not allowed here (Здесь не допускается объявление).
Declaration missing «;» (Отсутствие объявления «;»).
Declaration syntax error (Синтаксическая ошибка, объявление переменной).
Declaration terminated incorrectly (Объявления, завершенные неправильно).
Delete array size missing «]» (Отсутствие скобки «]»).
do-while statement missing ;OR For statement missing ; (Отсутствие утверждения do-while, или отсутствие утверждения For).
Expression syntax (Ошибка синтаксиса в выражении).
Extra parameter in call to function (Недопустимый параметр в обращении к функции).
Function call missing «)» (В обращении к функции отсутствует «)»).
Illegal initialization (Неверная инициализация).
Illegal character ‘character’ (Неверный символ » символ «).
Illegal structure operation (Неверная операция структуры).
Illegal use of pointer (Неверное использование указателя).
‘identifier’ cannot start a parameter declaration (Идентификатор не может начать объявление параметра).
‘identifier‘ is assigned a value which is never used (Идентификатор определяет значение, которое ранее не использовалось).
Invalid indirection (Недопустимый ссылка).
Lvalue required (Требуется наименование выражения (адрес переменной)).
Member identifier expected (Ожидается значение идентификатора).
Multiple declaration for ‘identifier’ (Многократные объявления для идентификатора).
Must take address of a memory location (Необходимо взять адрес расположения памяти).
Non-portable pointer conversion (Преобразования указателя не переносятся).
Not an allowed type (Недопустимый тип).
Operator «[]» missing «]» (Оператор «[]» не имеет «]»).
Overlays only supported in medium, large, and huge memory models (Оверлейные программы, поддерживаемые только в среде, большие и огромные модели памяти).
Parameter ‘parameter‘ is never used (Параметр «параметр» ранее никогда не использовался).
Size of ‘identifier’ is unknown or zero (Размер идентификатора неизвестен или нуль).
Structure required on left side of . or .* (Ошибка структуры на левой стороне, или отсутствие «*»).
Two consecutive dots (Наличие двух последовательных точек).
Too few parameters in call to ‘function’ (Несколько параметров в обращении к «функции»).
Too many initializers (Слишком много инициализаторов).
Too many error or warning messages (Слишком много ошибок или предупреждений).
Type mismatch in parameter ‘parameter‘ in call to ‘function‘ (Несоответствие типов в параметре «параметр» при обращении к «функции»).
Type mismatch in redeclaration of ‘identifier‘ (Несоответствия типов в повторном определении идентификатора).
Value of type void is not allowed (Недопустимые значения типа).
Variable ‘identifier‘ is initialized more than once (Идентификатор переменной инициализирован более одного раза).
Unable to open include file ‘filename’ (Невозможно открыть файл).
Undefined structure ‘structure’ (Неопределенная структура «структура»).
Undefined symbol ‘identifier’ (Неопределенный символ идентификатора).
Undefined symbol ‘symbol‘ in module ‘module‘ (Неопределенный символ «символ» в модуле «модуль»).
Unknown preprocessor directive: ‘identifier‘ (Неизвестны директивы препроцессора: идентификатора).
Wrong number of arguments in call of macro ‘macro‘ (Неправильное число параметров в обращении макрокоманды » макрокоманда «).
Источник
Как сделать двумерный массив указанного пользователем значения?
Как бы я объявил двумерный массив размером n на n, который дает пользователь?
Например, почему это работает:
но это не будет
Возможно ли иметь двумерный массив размера строки и столбца n или вам придется использовать вектор?
Спасибо!
Решение
Сделайте это с вектором, вот так:
Также есть std::valarray шаблон которая аналогична функциональности std::vector , но имеет интересную дополнительную функциональность, которая может быть полезна в случае матрицы.
Другие решения
Чтобы создать многомерный массив, вам нужно написать так:
И не забудьте удалить его:
Но текущая лучшая практика c ++ — никогда не выделять или освобождать память в коде приложения, то есть вы должны использовать std::vector или некоторый другой контейнерный класс.
Этот ответ отличается в двух пунктах от большинства других ответов:
- нет необработанного указателя или выделения памяти
- использовать один непрерывный (линейный) блок памяти
Общий подход использует один линейный блок памяти и сохранение элементов строки после строки или столбца после столбца (Строка или порядок столбцов ). Давайте немного обобщим и скажем, что вы хотите получить двумерное количество типа T с экстентами N0 а также N1 , Тогда вы можете получить необходимую память
Использование вектора вместо необработанного указателя имеет несколько преимуществ. Например, вы не можете забыть освободить память, потому что деконструктор заботится об этом автоматически (RAII идиома ). Другое преимущество заключается в том, что указанный выше конструктор заполняет вектор копиями, созданными по умолчанию. T (вместо того, чтобы оставить память неинициализированной).
Далее вы можете получить доступ к линейной памяти с помощью vector «s член operator[] (или функция-член at если вы хотите, связанные чеки). Вы, вероятно, хотите использовать два индекса n0 а также n1 в промежутках [ 0 , N0 ) а также [ 0 , N1 ), но память является линейной и требует одного индекса. Следовательно, вы можете ввести вспомогательную функцию index чтобы получить доступ к вашему 2D количеству, как, скажем,
Чтобы представить, как это может работать, рассмотрим матрицу 3 на 2. В данном линейном блоке памяти вы можете расположить элементы следующим образом:
В таком случае вы бы написали
В общем для d размеры у вас есть (псевдокод)
где выражения в скобках также называются смолы.
Если вы поместите всю эту логику в класс, она станет очень простой в использовании. Вот пример для вдохновения (онлайн демо с N = 4 ):
Можно создать двумерный массив без использования векторов, как показано ниже. Это будет работать для всех типов.
Но проблема заключается в управлении памятью, так как это грубый подход.
Вместо этого мы можем использовать векторы, которые можно
Источник
- Forum
- C et C++
- C
- D�buter
- error: array size missing
Sujet :
C
-
18/06/2021, 23h06
#1
Membre habitu�
error: array size missing
Bonjour,
Comment d�clarer ce tableau
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18#include<stdio.h> int main(int argc, char const *argv[]) { int x=1, i=0, nombre_element_lu; int tableau_notes []; printf("saisisez une liste de notes (-1 pour fin): n"); while (x>=0) { scanf("%f", &x); tableau_notes[i++]=x; } nombre_element_lu=--i; return 0; }
message d’erreur
1
2error: array size missing in 'tableau_notes' int tableau_notes [];
-
18/06/2021, 23h12
#2
-
19/06/2021, 11h07
#3
Bonjour
Envoy� par binco
H� oui, un tableau doit avoir une taille concr�te. Donc soit tu �cris int tableau_notes[]={…, …, …, …} et le compilateur «comptera» combien d’�l�ments se trouvent entre les accolades et rajoutera ce nombre dans les crochets, soit tu �cris int tableau_notes[n] «n» �tant un nombre strictement sup�rieur � 0 et pas trop gros pour ne pas exploser ta pile (la zone m�moire dans laquelle se trouvent tes variables).
Concernant ton programme, ton while (x >= 0) est dangereux car �a ne limite absolument pas le nombre de notes. Imaginons que tu aies int tableau_notes[5] et que l’utilisateurs saisisse 1, 8, 4, 7, 12, 18. A chaque saisie x est sup�rieur � 0 donc la note saisie va dans le tableau de notes. Sauf qu’il y a 6 notes tandis que ton tableau et limit� � 5 => UB
Il te faut trouver un test qui emp�che quoi qu’il arrive de faire saisir plus de notes que ce que le tableau peut en contenir. Sans compter que d’un point de vue math�matique, une note � 0 est tout � fait possible mais interdite par ton algo.Et ta variable «i» ne sert � rien (tu utiliserais «nombre_element_lu» � la place le programme marcherait pareil). Mais si tu veux quand-m�me utiliser «i», alors la ligne nombre_element_lu=—i est mauvaise car elle force «i» � changer (donc d�cr�ment et affectation alors que «i» n’est plus utilis� ensuite donc tu affectes une valeur � une variable que tu n’utlises plus). L’instruction ad�quate serait nombre_element_lu=i-1.
-
30/06/2021, 22h21
#4
+ R�pondre � la discussion
Cette discussion est r�solue.
- Forum
- C et C++
- C
- D�buter
- error: array size missing
Discussions similaires
-
R�ponses: 3
Dernier message: 14/04/2013, 23h31
-
R�ponses: 5
Dernier message: 14/09/2010, 23h27
-
R�ponses: 1
Dernier message: 03/05/2009, 22h43
-
R�ponses: 7
Dernier message: 02/03/2009, 09h35
-
R�ponses: 5
Dernier message: 12/02/2009, 15h36