четверг, 18 сентября 2014 г.

Ключевые слова в Си

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



Спецификаторы функций
inline - позволяет компилятору (на его усмотрение) оптимизировать код, непосредственно встраивая тело функции вместо ее вызова. 
_Noretrun - указывает на то, что поток выполнения не возвращается после вызова функции (прерывание, исключение, выход из программы, longjmp()).


Спецификаторы постоянства-изменяемости
const - переменная должна быть инициализирована при определении и не может меняться в ходе выполнения программы.
volatile - переменная может меняться не только потоком выполнения программы (например, при мэппинге регистров на основную память).

Спецификаторы времени хранения
auto - объявляется и хранится в пределах блока (функции, цикла или иного блока, ограниченного {}). По умолчанию все переменные имеют тип auto. В С++ имеет другое значение.
register - рекомендация компилятору сделать доступ к переменной наиболее быстрым (по возможности поместить в регистр).
static - оставаясь видимой в пределах блока, где она объявлена, статическая переменная сохраняет свое значение (например, между вызовами функций или при повторном заходе в цикл). Переменная static, объявленная на уровне файла, становится доступной только в нём.
extern - объявление переменной, определенной в другом модуле без выделения памяти.
_Thread_local - копия переменной создается для каждого потока и уничтожается вместе с ним. Может быть дополнительно static или extern.


restrict - применяется только для указателей и означает, что объекты, на которые ссылаются указатели, не пересекаются (например, при копировании области памяти возможно частичное пересечение) и не совпадают (указывают на одну и ту же переменную или область памяти). При компиляции не проводятся проверки на пересечение и совпадение.

Комментариев нет :

Отправить комментарий