auto: автоматические локальные переменные, как правило, когда мы определяем локальные переменные, они являются автоматическими локальными переменными, но это имеет тот же эффект, когда мы опускаем их при записи, локальные переменные сохраняются в стеке.
extern: глобальные переменные жизни. Например, я определяю int a в ac, но я хочу назвать это a в bc, но оно не определено.В настоящее время, прежде чем использовать эту переменную в bc, используйте extern a, чтобы сообщить a, что она определена в другом файл, и вы можете использовать его.
static: есть два варианта использования, первый — модифицировать локальные переменные, называемые статическими локальными переменными. Статические локальные переменные аналогичны назначенным глобальным переменным, хранятся в сегменте данных и имеют такой же жизненный цикл. Его связь без связи.
Второй — модифицировать глобальные переменные или функции, превращая внешние ссылки во внутренние атрибуты ссылок, которые можно использовать только в этом файле и которые не хотят вызываться другими файлами. Внешние атрибуты соединения — это обычные функции и глобальные переменные, а атрибуты, не связанные с соединением, — локальные переменные и статические локальные переменные.
register: обычно используется для изменения часто вызываемых глобальных переменных. Он будет помещен в регистр, такой как глобальная переменная gd в uboot, что может повысить эффективность. Но он старается поставить его в реестр максимально, не обязательно ставить в реестр.
летучий: переменный, изменчивый. Есть три ситуации, когда значение переменной неизвестно: 1. Значение, измененное прерыванием, 2. Та же самая переменная, используемая в многопоточности, 3. Значение (регистр), измененное аппаратно, эти три компилятора не могут узнать изменение стоимости. Таким образом, он используется, чтобы сказать компилятору не оптимизировать эту переменную, когда он встречает эту переменную. В этом случае ошибок не будет.
const: часто используется для определения констант, указывая на то, что константы не могут быть изменены. В основном это зависит от того, какой из них ближе всего к константе, то есть какой из них изменяется, рядом с * означает, что значение не может быть изменено, а рядом с переменной означает, что адрес не может быть изменен.
- const int * a: постоянный указатель, значение не может быть изменено, и указанный адрес может быть изменен.
- int * const a: Константа указателя, значение может быть изменено, но указанный адрес не может быть изменен.