Можете подсказать как можно это сделать самым оптимальным путем?
unsigned char msg[2] = {...}
int b = msg[0] * 256 + msg[1].
Ну я подумал что четверка следует из предоставленного мною кода :)
Но заработало и с 2
Должно выдать 300
unsigned char a[4]
в моём ответе-- просто так написана? int i
за пределы for свешивается. Ну, М$, да, в своём духе. for (int i = 0; i < 10; ++i) { for_label:; cout << i << endl; } goto for_label;
loop.cpp: In function ‘int main()’:
loop.cpp:6:1: error: jump to label ‘for_label’ [-fpermissive]
for_label:;
^~~~~~~~~
loop.cpp:10:7: note: from here
goto for_label;
^~~~~~~~~
loop.cpp:5:11: note: skips initialization of ‘int i’
for (int i = 0; i < 10; ++i) {
^
почему ЭТО компилируется без предупреждения?!
Но так как люди эти часто злоупотребляли компилятор иногда игнорирует требования программиста.
Лучше использовать специальные макросы типа "горячий код" или наоборо "холодный" в спецификации они есть
лучше использовать какой нибудь void и максимально отказаться от обобшенного кода на си.
А разве LD в названии переменной, не указывает на GNU компоновщик - ld, и эта переменная содержит пути по которым он проверяет наличие библиотек?
Для написания драйвера ядра нужды исходники ядра (точнее, только хереды) и компилятор.
Также в исходниках ядра есть темплейты (шаблоны) драйверов, правда сейчас не упомню где точно...
почему это недопустимо в C++
In a declaration T D where D has the form
D1 [constant-expressionopt]
and the type of the identifier in the declaration T D1 is “derived-declarator-type-list T,”
then the type of the identifier of D is an array type. T is called the array element type;
this type shall not be a reference type, the (possibly cv-qualified) type void, a function
type or an abstract class type. If the constant-expression (5.19) is present, it shall be
an integral constant expression and its value shall be greater than zero.
If, in the declaration ‘‘T D1’’, D1 has one of the forms:
D[ type-qualifier-listopt assignment-expressionopt ]
D[ static type-qualifier-listopt assignment-expression ]
D[ type-qualifier-list static assignment-expression ]
D[ type-qualifier-listopt * ]
and the type specified for ident in the declaration ‘‘T D’’ is ‘‘derived-declarator-type-list
T ’’, then the type specified for ident is ‘‘derived-declarator-type-list array of T ’’.121)
(See 6.7.5.3 for the meaning of the optional type qualifiers and the keyword static.)
If the size is not present, the array type is an incomplete type. If the size is * instead of
being an expression, the array type is a variable length array type of unspecified size,
which can only be used in declarations with function prototype scope;122) such arrays are
nonetheless complete types. If the size is an integer constant expression and the element
type has a known constant size, the array type is not a variable length array type;
otherwise, the array type is a variable length array type.
If the size is an expression that is not an integer constant expression: if it occurs in a
declaration at function prototype scope, it is treated as if it were replaced by *; otherwise,
each time it is evaluated it shall have a value greater than zero. The size of each instance
of a variable length array type does not change during its lifetime. Where a size
expression is part of the operand of a sizeof operator and changing the value of the
size expression would not affect the result of the operator, it is unspecified whether or not
the size expression is evaluated.
Я разместил в коде cin>>*command;
после while. Поэтому программа не знала что с чем сравнивать
cin>>*command;
-- это ещё две ошибки в одной строке: во-первых это ввод одного символа, а не строки, во-вторых, command по-прежнему не инициализирован в этом месте и *command даст ещё один SEGFAULT.долго ломал голову, пока писал функцию для распечатывания трехмерного массива, в голову пришло только то, что нужно брать указатель на этот массив и как-то перемещаться
int a[2][2]; a[1]
тип a[1] -- int [2]
. В памяти лежат подряд два int. В случае указателя ответом будет "на указатель". Т.е. int **p; p[1]
тип p[1] -- int *
. В памяти лежит указатель, чей-то адрес. Как по-твоему приведение типа может поменять содержимое памяти с двух целых чисел на адрес?
Из man chmod: