"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
'programing' 카테고리의 다른 글
이벤트 이미터로 매개 변수 전달 (0) | 2023.07.26 |
---|---|
Android "..."를 줄임표 문자로 바꿉니다. (0) | 2023.07.26 |
로컬 변수에 액세스할 수 있는 node.js의 외부 js 파일을 로드하고 실행하시겠습니까? (0) | 2023.07.26 |
java.sql.SQLException 매개 변수 인덱스가 범위를 벗어남(1 > 매개 변수 수, 즉 0) (0) | 2023.07.26 |
데이터베이스 열의 비트 플래그에 대한 단점은 무엇입니까? (0) | 2023.07.21 |