C89
auto break case char const continue default
do double else enum extern float for
goto if int long register return short
signed sizeof static struct switch typedef union
unsigned void volatile while
C99
inline restrict _Bool _Complex _Imaginary
C11
_Alignas _Alignof _Atomic _Generic _Noretrun _Static_assert
_Thread_local
_Noretrun - указывает на то, что поток выполнения не возвращается после вызова функции (прерывание, исключение, выход из программы, longjmp()).
volatile - переменная может меняться не только потоком выполнения программы (например, при мэппинге регистров на основную память).
_Thread_local - копия переменной создается для каждого потока и уничтожается вместе с ним. Может быть дополнительно static или extern.
auto break case char const continue default
do double else enum extern float for
goto if int long register return short
signed sizeof static struct switch typedef union
unsigned void volatile while
C99
inline restrict _Bool _Complex _Imaginary
C11
_Alignas _Alignof _Atomic _Generic _Noretrun _Static_assert
_Thread_local
Спецификаторы функций
inline - позволяет компилятору (на его усмотрение) оптимизировать код, непосредственно встраивая тело функции вместо ее вызова. _Noretrun - указывает на то, что поток выполнения не возвращается после вызова функции (прерывание, исключение, выход из программы, longjmp()).
Спецификаторы постоянства-изменяемости
const - переменная должна быть инициализирована при определении и не может меняться в ходе выполнения программы.volatile - переменная может меняться не только потоком выполнения программы (например, при мэппинге регистров на основную память).
Спецификаторы времени хранения
auto - объявляется и хранится в пределах блока (функции, цикла или иного блока, ограниченного {}). По умолчанию все переменные имеют тип auto. В С++ имеет другое значение.
register - рекомендация компилятору сделать доступ к переменной наиболее быстрым (по возможности поместить в регистр).
static - оставаясь видимой в пределах блока, где она объявлена, статическая переменная сохраняет свое значение (например, между вызовами функций или при повторном заходе в цикл). Переменная static, объявленная на уровне файла, становится доступной только в нём.
extern - объявление переменной, определенной в другом модуле без выделения памяти._Thread_local - копия переменной создается для каждого потока и уничтожается вместе с ним. Может быть дополнительно static или extern.
restrict - применяется только для указателей и означает, что объекты, на которые ссылаются указатели, не пересекаются (например, при копировании области памяти возможно частичное пересечение) и не совпадают (указывают на одну и ту же переменную или область памяти). При компиляции не проводятся проверки на пересечение и совпадение.
Комментариев нет :
Отправить комментарий