programing

"typedef"에 대한 구문 규칙 및 범위를 설명하십시오.

skycolor 2023. 7. 26. 21:44
반응형

"typedef"에 대한 구문 규칙 및 범위를 설명하십시오.

규칙은 무엇입니까?OTOH 간단한 사례는 새로운 유형이 줄의 마지막이라는 것을 의미하는 것 같습니다.여기처럼Uchar는 새로운 유형입니다.

typedef unsigned char Uchar;

하지만 함수 포인터는 완전히 다릅니다.여기서 새로운 유형은pFunc:

typedef int (*pFunc)(int);

저는 당장 다른 예를 생각해 낼 수는 없지만 매우 혼란스러운 사용법을 발견했습니다.

그래서 규칙이 있을까요 아니면 사람들이 경험을 통해 이것이 어떻게 이루어지는지 알아야 할까요? 왜냐하면 그들은 이전에 이런 식으로 행해지는 것을 보았기 때문입니다.

또한: 의 범위는 무엇입니까?typedef?

기본적으로typedef다음과 같이 접두사가 붙은 것을 제외하고는 개체 선언과 구문이 정확하게 동일합니다.typedef이 작업을 수행하면 선언의 의미가 변경되어 새 식별자가 선언된 개체가 일반 선언이었다면 가지고 있었을 형식의 별칭을 선언합니다.

A typedef개체 선언과 동일한 범위를 지정하므로 파일 범위를 지정하거나 블록 또는 (C++에서) 네임스페이스 또는 클래스에 로컬로 지정할 수 있습니다.

예.

선언합니다.int:

int a;

에 대한 별칭 형식을 선언합니다.int:

typedef int a_type;

에 대한 포인터를 선언합니다.char:

char *p;

의 별칭을 선언합니다.char *:

typedef char *pChar;

함수 포인터를 선언합니다.

int (*pFn)(int);

'함수 테이크의 포인터' 형식에 대한 별칭을 선언합니다.int그리고 돌아오는int':

typedef int (*pFunc)(int);

구문상의 편의를 위해,typedef스토리지 클래스 지정자로 처리됩니다.extern,static또는register의미론적으로는 물론 상당히 다르지만, 언제.typedef언어에 추가되었으며 문법의 기존 부분을 사용하여 구문을 정의하는 것이 더 간단합니다.

추가 중static개체 선언은 개체의 스토리지 클래스를 "static"(아직 그렇지 않은 경우)으로 변경하는 것을 제외하고 선언의 의미를 변경하지 않습니다.

{
    int foo; /* automatic storage duration */
    static int bar; /* static storage duration */
}

교체static와 함께typedef선언의 의미를 변경하여 정의할 이름이 개체 이름이 아니라 형식 이름(기존 형식의 별칭만 포함)이 되도록 합니다.

    typedef int baz; /* "baz" is an alias for "int" */

보다 복잡한 선언에도 동일한 구문이 적용됩니다.

int (*a)[42];         /* a is a pointer to an array of 42 ints */
static int (*b)[42];  /* Same as a, but with static storage duration */
typedef int (*c)[42]  /* c is an alias for the type int(*)[42], or 
                         "pointer to array of 42 ints" */

일단 당신이 깨닫는다면,typedef임의로 사용된 문법의 같은 슬롯에 밀어넣었습니다.extern,static,그리고.register,이해typedef선언은 객체 선언을 이해하는 것보다 어렵지 않습니다.(그cdecl프로그램 및 사이트는 복잡한 선언의 압축을 푸는 데 유용합니다.

당신은 또한 가질 수 있습니다.typedef함수 유형의 경우:

void func(void);              /* declare func as a function */
typedef void func_type(void); /* declare func_type as a name
                                 for a function type */

사용할 수 없습니다.typedef은 함수를하지만, 함수 하는 데 수. 함 유 형 은 함 수 를 선 거 있 니 다 습 수 선 할 사 용 데 는 하 언 수 를 터 포 인 함 수 정 하 의

func_type *ptr = func;

범위(선언된 식별자가 보이는 프로그램 텍스트의 영역을 의미함)에 대해서는,typedef선언의 범위는 다른 선언된 식별자와 동일합니다.파일 범위에서 선언된 경우, 함수 외부에서 선언 시점부터 파일의 끝까지 볼 수 있습니다.함수 내부에 선언된 경우 선언된 지점에서 가장 가까운 블록의 끝까지 볼 수 있습니다.그리고 다른 선언과 마찬가지로, 내부 범위에서 같은 이름을 가진 다른 선언으로 숨길 수 있습니다.

아무도 언급하지 않았기 때문에:항상 모든 객체 빌드에 국한됩니다.따라서 using/typedef 이름이 동일한 여러 cpp 파일을 컴파일하는 경우 서로 영향을 미치지 않습니다.

언급URL : https://stackoverflow.com/questions/2427739/please-explain-syntax-rules-and-scope-for-typedef

반응형