C 언어 | 구조체 선언 | 자동 변수 - auto
변수 선언시에 auto 키워드를 사용하여, 해당 변수가 선언된 복합문의 범위에서만 유효한 자동 변수임을 명시적으로 지정할 수 있다. 그러나 선언된 변수는 기본적으로 자동 변수이며, 현대에서는 auto 지정자를 사용하는 것은 의미가 없다.
로컬 수명을 가지는 변수
C 언어 변수 선언에는 변수의 수명을 명시적으로 지정하는 기억 클래스라 불리는 종류의 지정자를 사용할 수 있다. typedef는 사실은 기억 클래스의 일종이다. 그러나 typedef는 비교적 특수한 기억 클래스로, 본래의 기억 클래스는 변수가 어느 타이밍에 메모리에서 해제될 것인지를 결정하는 것이다.
기억 클래스 지정자
기억클래스지정자 형 변수형 ...
기억 클래스 지정자는 동일한 선언내에 다른 지정자를 조합해 지정할 수 없다.
함수 등의 복합문의 내부에서 선언된 변수를 자동 변수라고 한다. 자동 변수는 그 블록 내에서만 유효한 변수로 제어가 블록에 들어간 시점에서 초기화되고, 블록에서 벗어날 때 해제된다. 변수의 유효 범위에 대해서는 “변수의 유효 범위“에서 자세히 설명하고 있다. 기억 클래스는 변수를 선언하는 위치에 따라 자동으로 결정된다. 복합문 내부에서 선언된 변수는 컴파일러가 자동 변수라고 판단 해준다.
그러나 auto 지정자에 의해서 명시적으로 자동 변수를 선언 할 수 있다. 다만, 이 키워드를 적극적으로 이용하는 것에 장점이 없기 때문에 일반적으로 생략된다. 현재는 auto 키워드가 원래 의미로 사용되는 경우는 거의 없다.
auto 기억 클래스 지정자
auto 형 변수명 ...
기억 클래스로 선언시에 auto를 지정하면 변수가 자동 변수임을 명시적으로 지정할 수 있다.
C ++ 표준 규격인 ISO/IEC 14882:2011, 통칭 C++11에서 auto 키워드가 형 추론을 나타내는 다른 의미로 사용되도록 되었기 때문에, auto 지정자를 사용하는 C 언어의 코드를 C++ 언어로 컴파일하면 오류가 발생한다. auto 키워드의 의미는 C 언어와 C ++ 언어로 다르다는 점에 유의하자.
코드1
#include <stdio.h>
int main() {
auto char *str = "Kitty on your lap";
printf("%s\n" , str);
return 0;
}
코드1의 str 변수는 auto 기억 클래스 지정자를 사용하여 명시적으로 자동 변수임을 나타내고 선언되어 있다. 그러나 지금까지 학습해 온 것을 되돌아 보면 알 수 있듯이, auto는 생략해도 아무런 문제가 없다. 따라서 이것은 생략되어야 한다. C 언어 사양으로 함수에서 선언된 변수는 auto로 된다는 것이 원칙이다.