안녕하세요 제타지니입니다. 인생에는 참 변수가 많죠 오늘은 아두이노의 변수형에 대해서 배워보고자 합니다.
변수에 대해서 알아봅시다. 애초에 변수란 변할 수 있는 수를 뜻하고, 상수란 변할 수 없이 정해진 수를 말하지요?
애초에 C/C++에서 중괄호 내에 위치하는 코드는 하나의 블록을 형성합니다.
이 하나의 블록은 여러 개의 하위 블록을 포함할 수 있으므로, 블록들은 '계층 구조'를 이루고 있습니다.
블록이 중첩된 경우에는 유효 범위가 가장 좁은 변수가 우선하며, 이 우선순위는 동일한 이름의 변수가 여러 개 존재할 때 유효한 변수를 결정하기 위해 사용됩니다. 하지만, 하나의 블록 내에서 동일한 이름의 변수가 두개 이상 존재할 수 없다는 점은 알아 두시길!
여하튼, 변수는 두 가지로 나뉘는데, 지역변수와 전역 변수로 나뉩니다.
지역변수
-가장 가까이 있는 중괄호 쌍 내에서만 유효
-선언된 지역에서 벗어나면, 컴퓨터는 그 변수를 인지하지 못함
전역변수
-코드 전체에서 유효
-코드의 맨 위에서 선언하는 편
이렇게 변수는 두 가지로 나뉘게 되는데, 유효 범위 이외에도 몇 가지 지정자를 사용할 수 있습니다만, 많이 사용되는 지정자는 static, volatile, const, extern가 있습니다.
static
-선언 위치에 따라 일반 변수와 동일한 유효 범위를 가짐
(선언된 위치를 벗어나도 변수는 소멸하지 않음 but 선언된 유효범위 안에서만 호출과 접근 가능)
-선언된 지역, 유효 범위를 벗어나도 소멸되지 않고 그 '값을 유지'
(=즉, 루프 안에서 static 변수를 선언하면, +,-,*,/를 해도 원래 선언된 값을 유지)
volatile
-휘발성 변수라고 함.
-스케치를 컴파일할 때 최적화에서 제외(-'수정 가능한 변수'라고 컴퓨터에게 알려주어서 최적화에서 제외 시킴)
(최적화 과정: 실행 파일의 크기를 줄이거나 속도를 높이는 기능을 수행)
(실행 과정 중 정상적인 처리 순서에서 벗어나 명령어를 처리하는 경우 최적화로 인해 잘못된 결과가 나올 수 있음. )
-인터럽트 서비스 루틴에서 값을 변경하는 변수는 volatile로 선언
(인터럽트에 의해 정상적인 처리 순서를 벗어나 인터럽트 처리 루틴으로 이동하는 경우)
const
-상수
-선언에서 값이 할당된 이후 그 값을 바꿀 수 없는 변수
(=선언할 때 한 번 값을 대입 가능 but 이후 변경 가능)
#define(vs const)
-#define은 전처리기에서 처리하는 명령어
-유효범위 없음(전역)
-메모리 차지하지 않음 = 값을 대입할 수 없음
-read 만 가능
extern
-static과 같은 성질을 지님
-하지만, 유효범위를 벗어나도 호출, 접근 가능
-다른 파일에서도 호출, 접근 가능
(즉, 라이브러리에서 extern으로 선언된 자료형은 다른 코드에서도 호출 가능)
'만져보는 임베디드 시스템 > 아두이노 소프트웨어' 카테고리의 다른 글
아두이노 소프트웨어-vi. 실행 흐름 제어 (0) | 2020.12.31 |
---|---|
아두이노 소프트웨어-v.연산자 (0) | 2020.12.31 |
아두이노 소프트웨어-iii.변수의 자료형(데이터형) (0) | 2020.12.31 |
아두이노 소프트웨어-ii. code - 출력, main함수 (0) | 2020.12.31 |
아두이노 소프트웨어-i.아두이노 스케치 시작하기 (2) | 2020.12.05 |