[c] C auto 키워드는 어디에 사용됩니까?

대학 시절에 나는 auto키워드 에 대해 읽었고 시간이 지남에 따라 실제로 그것이 무엇인지 잊어 버렸습니다. 다음과 같이 정의됩니다.

지역 변수를 지역 수명을 갖는 것으로 정의

나는 그것이 어디에서 사용되는 것을 결코 발견하지 못했습니다. 실제로 사용됩니까? 그렇다면 어디에 사용되며 어떤 경우에 사용됩니까?



답변

auto같은 수정 자 static입니다. 변수의 스토리지 클래스를 정의합니다. 그러나 지역 변수의 기본값은 auto이므로 일반적으로 수동으로 지정할 필요가 없습니다.

이 페이지 에는 C의 다양한 스토리지 클래스가 나열됩니다.


답변

IAQ (Infrequently Asked Questions) 목록을 읽으면 자동차가 주로 차량을 정의하거나 신고하는 데 유용하다는 것을 알 수 있습니다.

auto my_car;

지속적으로 실외에 주차 된 차량 :

extern auto my_car;

유머 감각이 부족하고 “사실 만”을 원하는 사람들을위한 짧은 대답은 사용할 이유가 전혀 없다는 auto것입니다. 사용할 수있는 유일한 시간은 auto이미 auto저장소 클래스 가있는 변수 를 사용 하는 것이므로 어쨌든 일어날 일을 지정하는 것입니다. 스토리지 클래스가 아직 auto없는 변수 에서 사용하려고 auto하면 컴파일러에서 코드를 거부합니다. 기술을 얻고 싶다면 구현이 컴파일러 일 필요는없고 (하지만 그렇습니다) 이론적으로 진단을 내린 후 코드를 계속 컴파일 할 수 있습니다 (하지만 그렇지 않습니다).

kaz의 작은 부록 :

도 있습니다:

static auto my_car;

ISO C에 따른 진단이 필요합니다. 이는 자동차가 고장 났다고 선언하기 때문에 정확합니다. 진단은 무료이지만 대시 보드 조명을 끄면 80 달러가 든다. (eBay에서 온보드 진단용 USB 동글을 구입 한 경우 20 개 이하).

앞서 언급 한 것 extern auto my_car역시 진단이 필요하기 때문에 주차 단속을 담당하는시 직원 외에는 컴파일러를 통해 실행되지 않습니다.

extern static auto ...코드베이스에서 많은 것을 본다면 당신은 나쁜 이웃에있는 것입니다. 전체 장소가 Rust로 바뀌기 전에 즉시 더 나은 직업을 찾으십시오.


답변

auto키워드는 C 언어에서 쓸모가 없다. C 언어 이전에는 해당 키워드가 지역 변수를 선언하는 데 필요한 B 언어가 있었기 때문입니다. (B는 NB로 개발되어 C가되었습니다).

다음은 B에 대한 참조 설명서입니다 .

보시다시피 매뉴얼 auto에는 사용되는 예제가 가득 합니다. int키워드 가 없기 때문입니다 . “이것은 변수의 선언입니다”라고 말하려면 어떤 종류의 키워드가 필요하며 해당 키워드는 로컬인지 외부인지 ( autoextrn) 도 나타냅니다 . 둘 중 하나를 사용하지 않으면 구문 오류가 발생합니다. 즉 x, y;, 선언 자체가 아니라 auto x, y;있습니다.

B로 작성된 코드베이스는 언어가 개발됨에 따라 NB와 C로 포팅되어야했기 때문에 최신 버전의 언어는 이전 버전과의 호환성을 개선하기 위해 약간의 짐을 싣고 작업량이 줄어 들었습니다. 의 경우 auto프로그래머는 모든 항목을 찾아서 auto제거 할 필요가 없습니다.

매뉴얼에서 C ( 앞에 아무것도 쓰지 main() { ... }않고 쓸 수있게 됨)의 “암묵적 int”부분 int이 B에서도 나왔다는 것이 분명합니다 . 이것은 B 코드를 지원하는 또 다른 하위 호환성 기능입니다. 유형이 없기 때문에 함수에는 B에 지정된 반환 유형이 없습니다. 많은 어셈블리 언어에서와 같이 모든 것이 단어입니다.

함수를 선언 할 수있는 방법 extrn putchar과 식별자가 사용 하는 함수로 만드는 유일한 방법에 유의하십시오 . 함수 호출 표현식에서 사용됩니다. putchar(x)즉, 컴파일러에게 유형없는 단어를 함수 포인터로 처리하도록 지시하는 것입니다.


답변

C auto에서 변수가 블록에 로컬임을 나타내는 키워드입니다. 이것이 블록 범위 변수의 기본값이기 때문에 불필요하고 거의 사용되지 않습니다 (키워드를 논의하는 텍스트에서 예제 외부에서 사용하는 것을 본 적이 없다고 생각합니다). 누군가가 auto올바른 구문 분석 또는 동작을 얻기 위해 사용 이 필요한 경우를 지적 할 수 있다면 관심이있을 것 입니다.

그러나 C ++ 11 표준에서는 auto유형 추론을 지원하기 위해 키워드가 ‘하이재킹’되었습니다. 여기서 변수 유형은 초기화 프로그램 유형에서 가져올 수 있습니다.

auto someVariable = 1.5;   // someVariable will have type double

유형 추론은 주로 템플릿에서 변수 선언을 지원하기 위해 추가되거나 템플릿 매개 변수를 기반으로하는 유형 (또는 템플릿이 인스턴스화 될 때 컴파일러에 의해 추론 됨)이 수동으로 선언하는 것이 매우 어려울 수있는 템플릿 함수에서 반환됩니다.


답변

이전 Aztec C 컴파일러에서는 명령 줄 스위치를 사용하여 모든 자동 변수를 정적 변수 (어드레싱 속도 향상)로 전환 할 수있었습니다.

그러나로 명시 적으로 선언 된 변수 auto는이 경우 그대로 남아 있습니다. (그렇지 않으면 제대로 작동하지 않는 재귀 함수의 필수 요소입니다!)


답변

auto키워드는 Python에 세미콜론을 포함하는 것과 유사하며 이전 언어 ( B) 에서 필요 했지만 개발자는 대부분이 auto.

B에서 C 로의 전환을 돕기 위해 남겨진 것 같습니다. 간단히 말해 B 언어 호환성을위한 용도입니다.

예를 들어 B와 80 년대 C :

/* The following function will print a non-negative number, n, to
   the base b, where 2<=b<=10.  This routine uses the fact that
   in the ASCII character set, the digits 0 to 9 have sequential
   code values.  */

printn(n, b) {
        extrn putchar;
        auto a;

        if (a = n / b)        /* assignment, not test for equality */
                printn(a, b); /* recursive */
        putchar(n % b + '0');
}


답변

Auto 키워드는 스토리지 클래스 (변수 및 스토리지 장소의 수명을 결정하는 일종의 기술) 예제입니다. 해당 키워드의 Help에 의해 만들어진 변수가 중괄호 안에 만 수명 (lifetime)이 존재하는 동작이 있습니다.

{
    auto int x=8;        
    printf("%d",x);  // here x is 8

    { 
        auto int x=3;
        printf("%d",x);  // here x is 3
    }              

    printf("%d",x);  // here x is 8
}