#define xyz
static xyz myObject *__my_getitem (myObject* a, myObject *b) {
myObject *r;
.........
........
return r;
}
static
?xyz
делать с static
*
перед __my_getitem
myObject* a
а также myObject *a
(положение *
)Что такое
static
?
Это означает разные вещи в разных контекстах; вам нужно прочитать вашу книгу, чтобы понять все ее значения. В этом случае это означает, что функция доступна только внутри этого исходного файла, а не в любом, который скомпилирован отдельно и затем связан с ним.
Что такое
xyz
делать сstatic
?
Вызывает путаницу. Это пустой макрос (определенный в первой строке), поэтому перед компиляцией программы препроцессор ничего не заменит.
Почему есть
*
перед__my_getitem
*
после того, как тип меняет тип на указатель; так что это означает, что функция возвращает указатель на myObject
, (Кстати, вы никогда не должны объявлять имя с двумя последовательными _
персонажи; такие имена зарезервированы.)
Какая разница между
myObject* a
а такжеmyObject *a
(позиция *)
Ничего вообще; Пробел никогда не меняет смысла программы, кроме случаев, когда это необходимо для разделения токенов. Некоторые люди ведут священные войны за семантические значения этих двух стилей, но язык не заботится.
Что такое статическое?
Определения функций, которым предшествует «static», имеют ограниченную область действия. Они могут быть видны и использоваться только функциями в одном и том же исходном файле. Это можно сделать, если у вас есть функция, которая не имеет значения вне обработки, происходящей в текущем файле, или вы хотите ограничить использование, чтобы ее можно было изменить в будущем с меньшими последствиями из-за ее ограниченного объема.
Что делает XYZ со статическим
В этом конкретном случае xyz заменяется ничем, поэтому он ничего не делает. В общем случае, вероятно, будет изменено, как компилятор генерирует эту функцию, изменив «соглашение о вызовах». То есть xyz будет иметь какое-то значение для компилятора и не является частью языка Си.
Почему перед звездочкой стоит __my_getitem
Это показывает, что функция __my_getitem возвращает указатель на myObject.
В чем разница между myObject * a и myObject * a (позиция *)
Ничего, так как синтаксис гибкий.