C언어 변수 선언에서 궁금한 점이 있습니다.
변수 선언 시 앞에 volatile , static, enum, typedef , extern 등이 사용되는데
각 기능별 설명해 주실 분 있나요?
사용은 하는데 정확하게 이해가 되지 않습니다.
부탁 드립니다.
55글자 더 채워주세요.
1개의 답변이 있어요!
volatile은 컴파일러에 의한 최적화를 막아줍니다.
int a; a = 10; a = 20; a = 30;컴파일러는 a = 10과 a = 20을 쓸데없는 걸로 판단해
int a = 30;이렇게 최적화를 해 버릴 것입니다.
그런데 a가 하드웨어를 컨트롤하는 변수라거나... 하는 경우에는
컴파일러가 마음대로 최적화 해 버리면 곤란하겠죠
그런 경우에 사용하는 게 volatile입니다.static은 전역입니다.
함수 안에 있어도, 함수 밖에 있는 것처럼 쓸 수 있습니다.
int getCount() { static int count = 0; return ++count; }
처음 한 번만 초기화되고, 다시 초기화 없이 그 값을 쭉 유지합니다.이 함수를 호출할 때마다 1씩 증가된 값을 얻을 수 있습니다.
int count = 0; int getCount() { return ++count; }이 코드와 같다고 볼 수 있겠습니다.
enum은 열거형입니다.
#define DIRECTION_UP 0 #define DIRECTION_DOWN 1 #define DIRECTION_LEFT 2 #define DIRECTION_RIGHT 3 #define DIRECTION_FRONT 4 #define DIRECTION_BACK 5 int a = DIRECTION_UP;열거형을 이런 식으로 관리하면 중간에 뭔가 빠지거나 추가될 때마다 많이 귀찮지만
enum Direction { DIRECTION_UP, DIRECTION_DOWN, DIRECTION_LEFT, DIRECTION_RIGHT, DIRECTION_FRONT, DIRECTION_BACK } enum Direction a = DIRECTION_UP;enum을 쓰면 자동으로 관리해 주고, 심지어 타입 이름도 직관적입니다!
typedef는 타입 이름을 줄이는 데 쓸 수 있습니다.
enum myBool { false, true }; enum myBool a = true; enum myBool b = false;struct나 union, enum 등을 항상 붙이기 귀찮으니까!
typedef enum { false, true } bool; bool a = true; bool b = false;이렇게 줄여서 쓸 수 있습니다. (배열, 포인터에도 쓸 수 있습니다.)
extern은 코드 외부의 다른 변수를 사용할 때 씁니다.