extern
다른 c파일에서 변수, 함수를 공유하기 위해서 사용한다.
예를 들면 aaa.c에서 int a =1; 를 선언했다고 하자.
bbb.c에서 a를 참조하려면 extern int a; 로 a 변수를 참조할 수 있다.
static
extern과 달리 다른 c파일에서 참조하는 것을 막기위해 사용한다.
한 파일 내에서는 전역변수로 사용한다.
aaa.c에서 static int a = 1;로 선언하면 bbb.c에서 aaa.c가 선언한 a를 참조할 수 없다.
그냥 지역변수는 선언된 블록 내에서 사용 가능하다.
const
이미 assign 된 값을 변경할 수 없게 해준다.
예외도 있다.
const int i = 0;
*(int*)(&i) = 1; 은 가능하다.
여기서 #define a = 1; vs const a = 1; 의 차이점은
const는 메모리가 할당됨으로써 디버깅 시에 메모리 값을 확인할 수 있다,
volatile
const와 반대로 변수가 언제 어떻게 바뀔지 모른다고 알려주기위해 사용한다.
컴파일러는 volatile 변수는 최적화에서 제외하여 항상 메모리에 접근하도록 한다.
예를 들어
int main()
{
int i=0;
while (i < 10)
i++;
}
위의 코드를 아래와 같이 최적화 시킨다.
int main()
{
int i = 10;
}
하지만 volatile을 사용하면
int main()
{
volatile int i=0;
while (i < 10)
i++;
}
그냥 코드 그대로 컴파일한다.
extern const volatile int a;
const, volatile은 반대 개념인대 위와 같이 사용했다면
a가 하드웨어에 의해 변경될 수 있지만 (volatile), 프로그램 내부에서는 값이 변경될 수 없음을 뜻한다. (const)
https://dojang.io/mod/page/view.php?id=749
https://littlepenguin.tistory.com/7
register
많이 사용하는 변수를 register 에 넣고 사용한다.
최적화 옵션을 켜면 자동으로 자주 사용하는 변수는 register에 넣어진다.
'전자공학 > 프로그래밍' 카테고리의 다른 글
파이썬 아나콘다 설치하기, tensorflow 설치하기 (0) | 2020.04.14 |
---|---|
윈도우10 파이썬 python 설치 (친절 설명) (0) | 2020.04.14 |
비트필드 (Bit field)! (0) | 2020.02.11 |
스크럼이란? (Scrum) (0) | 2020.01.13 |
데브옵스란? (DevOps) (0) | 2020.01.07 |