SlideShare a Scribd company logo
1 of 22
C
Language
C Language Advanced
Lection 22
Содержание
• Области видимости переменных
• Классы памяти переменных
 auto
 register
 extern
 static
• Модификатор static для функции
• Ключевое слово volatile
23.05.2019 0:36 Advanced 2
Области видимости переменных
#include <stdio.h>
unsigned int myGlobalVariable;
int main()
{
unsigned int myLocalVariable_lv0;
{
unsigned int myLocalVariable_lv1;
{
unsigned int myLocalVariable_lv2;
}
}
return 0;
}
3
Пример #1
4
Пример #1
5
Классы памяти переменных
Класс памяти определяет:
• область действия переменной;
• время жизни переменной
6
Класс памяти auto
auto - спецификатор автоматического
класса памяти указывает на то, что объект
располагается в локальной (или
автоматически распределяемой) памяти.
7
Пример #2
8
Класс памяти register
register - спецификатор автоматического
класса памяти. Применяется к объектам, по
умолчанию располагаемым в локальной
памяти. Представляет из себя "ненавязчивую
просьбу" к транслятору (если это возможно) о
размещении значений объектов, объявленных
со спецификатором register в одном из
доступных регистров, а не в локальной
памяти.
9
Пример #3
10
Класс памяти extern
extern - cпецификатор внешнего
статического класса памяти. Обеспечивает
существование объекта с момента его
определения до конца выполнения
программы. Объект, объявленный со
спецификатором extern доступен во всех
модулях программы, то есть глобален
11
Класс памяти extern
12
Класс памяти static
static – спецификатор внутреннего статического
класса памяти. Применяется только(!) к именам
объектов и функций. В C этот спецификатор имеет
два значения. Первое означает, что определяемый
объект располагается по фиксированному адресу.
Тем самым обеспечивается существование объекта
с момента его определения до конца выполнения
программы. Второе значение означает
локальность. Объявленный со спецификатором
static локален в одном программном модуле (то
есть, недоступен из других модулей
многомодульной программы).
13
Пример #4
14
Пример #4
15
Пример #5
16
Модификатор static для функции
17
Пример #6
18
Классы памяти переменных
(сравнительная таблица)
19
Ключевое слово volatile
Ключевое слово volatile информирует
компилятор, что значение переменной
может меняться извне. Это может
произойти под управлением
операционной системы, аппаратных
средств или другого потока. Поскольку
значение может измениться, компилятор
каждый раз загружает его из памяти.
20
Пример #7
21
Пример #7
22

More Related Content

What's hot

Глава1: Обзор технологии Java
Глава1: Обзор технологии JavaГлава1: Обзор технологии Java
Глава1: Обзор технологии Javametaform
 
Subprograms in VHDL, Procedures in VHDL
Subprograms in VHDL, Procedures in VHDLSubprograms in VHDL, Procedures in VHDL
Subprograms in VHDL, Procedures in VHDLvitaliykulanov
 
Basic principles of projects description in VHDL - ENTITY, ARCHITECTURE, LIBR...
Basic principles of projects description in VHDL - ENTITY, ARCHITECTURE, LIBR...Basic principles of projects description in VHDL - ENTITY, ARCHITECTURE, LIBR...
Basic principles of projects description in VHDL - ENTITY, ARCHITECTURE, LIBR...vitaliykulanov
 
Массивы в Java
Массивы в JavaМассивы в Java
Массивы в Javametaform
 
Structural project description in VHDL
Structural project description in VHDLStructural project description in VHDL
Structural project description in VHDLvitaliykulanov
 
Этюды о буферизации: асинхронные оповещения, репликация обновлений, объединен...
Этюды о буферизации: асинхронные оповещения, репликация обновлений, объединен...Этюды о буферизации: асинхронные оповещения, репликация обновлений, объединен...
Этюды о буферизации: асинхронные оповещения, репликация обновлений, объединен...corehard_by
 
javascript_part1
javascript_part1javascript_part1
javascript_part1sovest
 
Statements in VHDL - Sequential Statements
Statements in VHDL - Sequential StatementsStatements in VHDL - Sequential Statements
Statements in VHDL - Sequential Statementsvitaliykulanov
 
Subprograms in VHDL, Functions in VHDL
Subprograms in VHDL, Functions in VHDLSubprograms in VHDL, Functions in VHDL
Subprograms in VHDL, Functions in VHDLvitaliykulanov
 
ветвление.условный оператор.циклы
ветвление.условный оператор.циклыветвление.условный оператор.циклы
ветвление.условный оператор.циклыdasha2012
 
ук 03.001.02 2011
ук 03.001.02 2011ук 03.001.02 2011
ук 03.001.02 2011etyumentcev
 
OpenMP и статический анализ кода
OpenMP и статический анализ кодаOpenMP и статический анализ кода
OpenMP и статический анализ кодаTatyanazaxarova
 
20110515 csseminar velder_otsenki dlini slov
20110515 csseminar velder_otsenki dlini slov20110515 csseminar velder_otsenki dlini slov
20110515 csseminar velder_otsenki dlini slovComputer Science Club
 
File input/output in VHDL
File input/output in VHDLFile input/output in VHDL
File input/output in VHDLvitaliykulanov
 
20100321 virtualization igotti_lecture08
20100321 virtualization igotti_lecture0820100321 virtualization igotti_lecture08
20100321 virtualization igotti_lecture08Computer Science Club
 
тихонов кв работа с прерываниями в микроконтроллерах в 21 веке
тихонов кв работа с прерываниями в микроконтроллерах в 21 векетихонов кв работа с прерываниями в микроконтроллерах в 21 веке
тихонов кв работа с прерываниями в микроконтроллерах в 21 векеKirill Tikhonov
 

What's hot (20)

Attributes in VHDL
Attributes in VHDLAttributes in VHDL
Attributes in VHDL
 
Глава1: Обзор технологии Java
Глава1: Обзор технологии JavaГлава1: Обзор технологии Java
Глава1: Обзор технологии Java
 
Subprograms in VHDL, Procedures in VHDL
Subprograms in VHDL, Procedures in VHDLSubprograms in VHDL, Procedures in VHDL
Subprograms in VHDL, Procedures in VHDL
 
Basic principles of projects description in VHDL - ENTITY, ARCHITECTURE, LIBR...
Basic principles of projects description in VHDL - ENTITY, ARCHITECTURE, LIBR...Basic principles of projects description in VHDL - ENTITY, ARCHITECTURE, LIBR...
Basic principles of projects description in VHDL - ENTITY, ARCHITECTURE, LIBR...
 
Массивы в Java
Массивы в JavaМассивы в Java
Массивы в Java
 
Structural project description in VHDL
Structural project description in VHDLStructural project description in VHDL
Structural project description in VHDL
 
Этюды о буферизации: асинхронные оповещения, репликация обновлений, объединен...
Этюды о буферизации: асинхронные оповещения, репликация обновлений, объединен...Этюды о буферизации: асинхронные оповещения, репликация обновлений, объединен...
Этюды о буферизации: асинхронные оповещения, репликация обновлений, объединен...
 
javascript_part1
javascript_part1javascript_part1
javascript_part1
 
Statements in VHDL - Sequential Statements
Statements in VHDL - Sequential StatementsStatements in VHDL - Sequential Statements
Statements in VHDL - Sequential Statements
 
Subprograms in VHDL, Functions in VHDL
Subprograms in VHDL, Functions in VHDLSubprograms in VHDL, Functions in VHDL
Subprograms in VHDL, Functions in VHDL
 
ветвление.условный оператор.циклы
ветвление.условный оператор.циклыветвление.условный оператор.циклы
ветвление.условный оператор.циклы
 
ук 03.001.02 2011
ук 03.001.02 2011ук 03.001.02 2011
ук 03.001.02 2011
 
лекция 2
лекция 2лекция 2
лекция 2
 
OpenMP и статический анализ кода
OpenMP и статический анализ кодаOpenMP и статический анализ кода
OpenMP и статический анализ кода
 
20110515 csseminar velder_otsenki dlini slov
20110515 csseminar velder_otsenki dlini slov20110515 csseminar velder_otsenki dlini slov
20110515 csseminar velder_otsenki dlini slov
 
TeaVM: dead code elimination and devirtualization
TeaVM: dead code elimination and devirtualizationTeaVM: dead code elimination and devirtualization
TeaVM: dead code elimination and devirtualization
 
fp intro
fp introfp intro
fp intro
 
File input/output in VHDL
File input/output in VHDLFile input/output in VHDL
File input/output in VHDL
 
20100321 virtualization igotti_lecture08
20100321 virtualization igotti_lecture0820100321 virtualization igotti_lecture08
20100321 virtualization igotti_lecture08
 
тихонов кв работа с прерываниями в микроконтроллерах в 21 веке
тихонов кв работа с прерываниями в микроконтроллерах в 21 векетихонов кв работа с прерываниями в микроконтроллерах в 21 веке
тихонов кв работа с прерываниями в микроконтроллерах в 21 веке
 

More from Roman Brovko

Individual task Networking
Individual task NetworkingIndividual task Networking
Individual task NetworkingRoman Brovko
 
Networking essentials lect3
Networking essentials lect3Networking essentials lect3
Networking essentials lect3Roman Brovko
 
Gl embedded starterkit_ethernet
Gl embedded starterkit_ethernetGl embedded starterkit_ethernet
Gl embedded starterkit_ethernetRoman Brovko
 
Networking essentials lect2
Networking essentials lect2Networking essentials lect2
Networking essentials lect2Roman Brovko
 
Networking essentials lect1
Networking essentials lect1Networking essentials lect1
Networking essentials lect1Roman Brovko
 
Bare metal training_07_spi_flash
Bare metal training_07_spi_flashBare metal training_07_spi_flash
Bare metal training_07_spi_flashRoman Brovko
 
Bare metal training_06_I2C
Bare metal training_06_I2CBare metal training_06_I2C
Bare metal training_06_I2CRoman Brovko
 
Bare metal training_05_uart
Bare metal training_05_uartBare metal training_05_uart
Bare metal training_05_uartRoman Brovko
 
Bare metal training_04_adc_temp_sensor
Bare metal training_04_adc_temp_sensorBare metal training_04_adc_temp_sensor
Bare metal training_04_adc_temp_sensorRoman Brovko
 
Bare metal training_03_timers_pwm
Bare metal training_03_timers_pwmBare metal training_03_timers_pwm
Bare metal training_03_timers_pwmRoman Brovko
 
Bare metal training_02_le_ds_and_buttons
Bare metal training_02_le_ds_and_buttonsBare metal training_02_le_ds_and_buttons
Bare metal training_02_le_ds_and_buttonsRoman Brovko
 
Bare metal training_01_hello_world
Bare metal training_01_hello_worldBare metal training_01_hello_world
Bare metal training_01_hello_worldRoman Brovko
 
Bare metal training_00_prerequisites
Bare metal training_00_prerequisitesBare metal training_00_prerequisites
Bare metal training_00_prerequisitesRoman Brovko
 
C language lect_23_advanced
C language lect_23_advancedC language lect_23_advanced
C language lect_23_advancedRoman Brovko
 
C language lect_21_advanced
C language lect_21_advancedC language lect_21_advanced
C language lect_21_advancedRoman Brovko
 
подготовка рабочего окружения
подготовка рабочего окруженияподготовка рабочего окружения
подготовка рабочего окруженияRoman Brovko
 
C language lect_20_advanced
C language lect_20_advancedC language lect_20_advanced
C language lect_20_advancedRoman Brovko
 
C language lect_19_basics
C language lect_19_basicsC language lect_19_basics
C language lect_19_basicsRoman Brovko
 
C language lect_18_basics
C language lect_18_basicsC language lect_18_basics
C language lect_18_basicsRoman Brovko
 

More from Roman Brovko (20)

Individual task Networking
Individual task NetworkingIndividual task Networking
Individual task Networking
 
Networking essentials lect3
Networking essentials lect3Networking essentials lect3
Networking essentials lect3
 
Gl embedded starterkit_ethernet
Gl embedded starterkit_ethernetGl embedded starterkit_ethernet
Gl embedded starterkit_ethernet
 
Networking essentials lect2
Networking essentials lect2Networking essentials lect2
Networking essentials lect2
 
Networking essentials lect1
Networking essentials lect1Networking essentials lect1
Networking essentials lect1
 
Bare metal training_07_spi_flash
Bare metal training_07_spi_flashBare metal training_07_spi_flash
Bare metal training_07_spi_flash
 
Bare metal training_06_I2C
Bare metal training_06_I2CBare metal training_06_I2C
Bare metal training_06_I2C
 
Glesk worshop
Glesk worshopGlesk worshop
Glesk worshop
 
Bare metal training_05_uart
Bare metal training_05_uartBare metal training_05_uart
Bare metal training_05_uart
 
Bare metal training_04_adc_temp_sensor
Bare metal training_04_adc_temp_sensorBare metal training_04_adc_temp_sensor
Bare metal training_04_adc_temp_sensor
 
Bare metal training_03_timers_pwm
Bare metal training_03_timers_pwmBare metal training_03_timers_pwm
Bare metal training_03_timers_pwm
 
Bare metal training_02_le_ds_and_buttons
Bare metal training_02_le_ds_and_buttonsBare metal training_02_le_ds_and_buttons
Bare metal training_02_le_ds_and_buttons
 
Bare metal training_01_hello_world
Bare metal training_01_hello_worldBare metal training_01_hello_world
Bare metal training_01_hello_world
 
Bare metal training_00_prerequisites
Bare metal training_00_prerequisitesBare metal training_00_prerequisites
Bare metal training_00_prerequisites
 
C language lect_23_advanced
C language lect_23_advancedC language lect_23_advanced
C language lect_23_advanced
 
C language lect_21_advanced
C language lect_21_advancedC language lect_21_advanced
C language lect_21_advanced
 
подготовка рабочего окружения
подготовка рабочего окруженияподготовка рабочего окружения
подготовка рабочего окружения
 
C language lect_20_advanced
C language lect_20_advancedC language lect_20_advanced
C language lect_20_advanced
 
C language lect_19_basics
C language lect_19_basicsC language lect_19_basics
C language lect_19_basics
 
C language lect_18_basics
C language lect_18_basicsC language lect_18_basics
C language lect_18_basics
 

C language lect_22_advanced

  • 2. Содержание • Области видимости переменных • Классы памяти переменных  auto  register  extern  static • Модификатор static для функции • Ключевое слово volatile 23.05.2019 0:36 Advanced 2
  • 3. Области видимости переменных #include <stdio.h> unsigned int myGlobalVariable; int main() { unsigned int myLocalVariable_lv0; { unsigned int myLocalVariable_lv1; { unsigned int myLocalVariable_lv2; } } return 0; } 3
  • 6. Классы памяти переменных Класс памяти определяет: • область действия переменной; • время жизни переменной 6
  • 7. Класс памяти auto auto - спецификатор автоматического класса памяти указывает на то, что объект располагается в локальной (или автоматически распределяемой) памяти. 7
  • 9. Класс памяти register register - спецификатор автоматического класса памяти. Применяется к объектам, по умолчанию располагаемым в локальной памяти. Представляет из себя "ненавязчивую просьбу" к транслятору (если это возможно) о размещении значений объектов, объявленных со спецификатором register в одном из доступных регистров, а не в локальной памяти. 9
  • 11. Класс памяти extern extern - cпецификатор внешнего статического класса памяти. Обеспечивает существование объекта с момента его определения до конца выполнения программы. Объект, объявленный со спецификатором extern доступен во всех модулях программы, то есть глобален 11
  • 13. Класс памяти static static – спецификатор внутреннего статического класса памяти. Применяется только(!) к именам объектов и функций. В C этот спецификатор имеет два значения. Первое означает, что определяемый объект располагается по фиксированному адресу. Тем самым обеспечивается существование объекта с момента его определения до конца выполнения программы. Второе значение означает локальность. Объявленный со спецификатором static локален в одном программном модуле (то есть, недоступен из других модулей многомодульной программы). 13
  • 20. Ключевое слово volatile Ключевое слово volatile информирует компилятор, что значение переменной может меняться извне. Это может произойти под управлением операционной системы, аппаратных средств или другого потока. Поскольку значение может измениться, компилятор каждый раз загружает его из памяти. 20