programing

C auto 키워드는 어디에서 사용됩니까?

bestcode 2022. 10. 18. 22:53
반응형

C auto 키워드는 어디에서 사용됩니까?

대학시절 나는 에 대해 읽었다.auto키워드가 뭔지 까먹었어요.다음과 같이 정의됩니다.

로컬 변수를 로컬라이프타임이 있는 것으로 정의합니다.

어디에서도 사용되고 있는 것을 발견하지 못했습니다만, 실제로 사용되고 있다면 어디에, 어떤 경우에 사용되고 있습니까?

IAQ(Infrequently Asked Questions) 목록을 읽어보셨다면 자동이 주로 차량을 정의하거나 선언하는 데 유용하다는 것을 아실 것입니다.

auto my_car;

야외에 계속 주차되어 있는 차량:

extern auto my_car;

유머감각이 부족하고 "사실만 알고 싶은 분"을 위한 간단한 답변은 사용할 이유가 전혀 없다는 것입니다.auto조금도.당신이 사용할 수 있는 유일한 시간은auto이미 있는 변수와 함께 있습니다.auto스토리지 클래스라고 하는 것은, 어쨌든 일어날 일을 특정하고 있는 것입니다.사용 시도 중auto를 가지지 않는 모든 변수에 대해auto스토리지 클래스는 컴파일러가 이미 코드를 거부합니다.테크니컬을 취득하고 싶은 경우는, 반드시 컴파일러가 되는 것은 아니고(하지만), 이론적으로는 Diagnostics를 발행한 후에도 코드 컴파일을 계속할 수 있습니다(그러나, 취득할 수 없습니다).

KAZ별 소량 부록:

또, 다음과 같은 것도 있습니다.

static auto my_car;

ISO C에 따른 진단이 필요합니다.차가 고장났다는 것을 알 수 있기 때문에 이것은 옳습니다.진단은 무료이지만 대시보드 라이트를 끄면 80달러가 듭니다.(이베이에서 온보드 진단용 USB 동글을 구입하신 경우 20달러 이하입니다.)

전술한 바와 같이extern auto my_car또한 진단이 필요하며, 그렇기 때문에 주차 단속을 담당하는 시 직원 외에는 컴파일러를 통해 실행되지 않습니다.

많이 보면extern static auto ...어떤 코드 베이스든, 당신은 나쁜 동네에 있습니다. 장소 전체가 Rust로 변하기 전에 당장 더 나은 직업을 찾으세요.

auto와 같은 수식어이다.static변수의 스토리지 클래스를 정의합니다.단, 로컬 변수의 기본값은auto, 통상, 수동으로 지정할 필요는 없습니다.

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

auto키워드는 C 언어에서는 사용할 수 없습니다.이는 C 언어 이전에는 로컬 변수를 선언하기 위해 해당 키워드가 필요한 B 언어가 존재했기 때문입니다.(B는 NB로 발전하여 C가 되었다.)

여기 B의 참고 매뉴얼이 있습니다.

보시는 바와 같이 매뉴얼에는 다음과 같은 예가 많이 있습니다.auto사용됩니다.이것은 이 일이 일어나지 않기 때문이다.int키워드를 지정합니다.「이것은 변수의 선언입니다」라고 하기 위해서는, 일종의 키워드가 필요합니다.이 키워드는 로컬인지 외부인지를 나타내기도 합니다(autoextrn둘 중 하나를 사용하지 않으면 구문 오류가 발생합니다.즉,x, y;선언 자체는 아니지만auto x, y;이에요.

언어가 개발됨에 따라 B로 작성된 코드 베이스를 NB 및 C로 이식해야 했기 때문에, 새로운 버전의 언어는 역호환성을 개선하여 작업량을 줄였다.의 경우auto프로그래머는 모든 발생을 추적할 필요가 없었습니다.auto제거해 주세요.

설명서에서 알 수 있듯이 현재 사춘기 "암묵적"이 C를 순항하고 있습니다(글을 쓸 수 있습니다.main() { ... }아무 것도 없이int(앞)도 B에서 온 것입니다.이것은 B코드를 지원하는 또 다른 하위 호환성 기능입니다.함수에 유형이 없기 때문에 B에 지정된 반환 유형이 없습니다.모든 것이 단어입니다. 많은 어셈블리 언어에서처럼요.

함수를 선언하는 방법에 유의하십시오.extrn putchar그리고 그것을 식별자가 사용하는 함수로 만드는 유일한 것: 그것은 다음과 같은 함수 호출 표현에서 사용됩니다.putchar(x)그것이 바로 컴파일러가 그 타이프 없는 단어를 함수 포인터로 취급하도록 지시하는 것입니다.

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

하지만 변수는 명시적으로auto그대로 두었던 것 같아요.(재귀 함수가 없으면 제대로 작동하지 않는 경우 필수!)

주식회사auto는 변수가 블록에 로컬임을 나타내는 키워드입니다.이것이 블록 범위 변수의 기본값이기 때문에 불필요하고 거의 사용되지 않습니다(키워드에 대해 설명하는 텍스트에서 예제를 제외하고 사용하는 것은 본 적이 없습니다).누군가 그 사용법을 지적해 주셨으면 합니다.auto올바른 해석 또는 동작을 얻기 위해 필요합니다.

단, C++11 표준에서는auto키워드는 변수 유형을 이니셜라이저 유형에서 가져올 수 있는 유형 추론을 지원하기 위해 "initializer"로 지정되었습니다.

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

형식 추론은 주로 템플릿 내의 변수 선언을 지원하기 위해 추가되거나 템플릿 파라미터에 기초한 유형(또는 템플릿 인스턴스화 시 컴파일러에 의해 추론됨)이 수동으로 선언하는 데 매우 번거로울 수 있는 템플릿 함수에서 반환됩니다.

auto블럭 범위 변수에만 사용할 수 있습니다. extern auto int컴파일러는 이것이 외부 정의를 사용하는지 또는 외부 정의를 자동 정의로 덮어쓸지 여부를 판단할 수 없기 때문에 쓰레기다(auto와 extern은 완전히 다른 스토리지 기간입니다).static auto int그것 또한 명백히 쓰레기입니다.)항상 한 방향으로 해석하는 대신 오류로 처리하도록 선택할 수 있습니다.

한 가지 특징이 있습니다.auto이 기능을 제공하므로 함수 내에서 'everything is int' 규칙을 사용할 수 있습니다.함수의 외부와 달리, 여기서a=3정의로 해석됩니다.int a =3파일 범위에는 할당이 존재하지 않기 때문에a=3함수의 내부 오류입니다.왜냐하면 컴파일러는 항상 그것을 정의가 아닌 외부 변수에 대한 할당으로 해석하기 때문입니다(설령 함수가 존재하지 않더라도).extern int a함수 또는 파일 범위 내에서 선언을 전달)하지만 다음과 같은 지정자가 있습니다.static,const,volatile또는auto그것이 정의이며 컴파일러는 그것을 정의로 받아들인다.단, 단,auto다른 지정자의 부작용이 없습니다. auto a=3그러므로 암묵적으로auto int a = 3인정하건대signed a = 3같은 효과가 있습니다.unsigned a = 3는 항상 서명되지 않은 int입니다.

또, 주의: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) {
        extern putchar;
        auto a;

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

auto 키워드는 스토리지 클래스(변수 및 저장 장소의 수명을 결정하는 일종의 기술)의 예입니다.이 키워드의 도움말에 의해 작성된 변수의 수명(life time)이 중괄호 안에만 존재하는 동작이 있습니다.

{
    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
}          

C의 스토리지 클래스 지정자(external, static, register, auto)는 익히 알고 계실 것입니다."auto"의 정의는 다른 답변에서 거의 나와 있지만, "auto" 키워드의 사용법은 확실하지 않지만 컴파일러에 의존한다고 생각합니다.스토리지 클래스 지정자와 관련하여 규칙이 있습니다.변수에 여러 스토리지 클래스 지정자를 사용할 수 없습니다.이것이 정적 글로벌 변수를 외부로 내보낼 수 없는 이유입니다.따라서 이러한 파일은 파일에서만 인식됩니다.컴파일러 설정으로 이동하면 속도를 위한 최적화 플래그를 활성화할 수 있습니다.컴파일러가 최적화하는 방법 중 하나는 스토리지 클래스 지정자가 없는 변수를 찾아 캐시 메모리의 가용성과 레지스터 지정자를 사용하여 변수를 처리해야 하는지 여부를 확인하는 것입니다.프로그램의 특정 변수가 그다지 중요하지 않고 컴파일러가 이를 레지스터로 간주하지 않도록 하면서 코드의 속도를 최적화하려면 어떻게 해야 할까요?"register auto a;" 또는 "auto register int a;"를 입력하면 여러 스토리지 클래스 지정자를 사용하는 오류가 발생하기 때문에 컴파일러가 레지스터 지정자를 변수에 추가할 수 없습니다.요약하자면, 자동은 최적화를 통해 컴파일러가 변수를 레지스터로 취급하지 못하도록 할 수 있다고 생각했습니다.

이 이론은 GCC 컴파일러에서는 동작하지 않지만 다른 컴파일러에서는 동작하지 않습니다.

언급URL : https://stackoverflow.com/questions/2192547/where-is-the-c-auto-keyword-used

반응형