programing

C에서 STRCT를 사용할 때 명명 규칙

cafebook 2023. 10. 5. 23:32
반응형

C에서 STRCT를 사용할 때 명명 규칙

저는 C를 배우고 있는데 구조 이름 앞에 구조가 정의된 사람을 발견했습니다.제가 처음 보는 건데, 누가 조금만 더 알려주실 수 있나요?어떤 사람이 StructName 대신 _aStructName을 사용하는 이유는 무엇입니까?

struct _huffmanNode {
    int value;
    uint32_t frequency;

    int hasChild;
    struct _huffmanNode *child[2];

    struct _huffmanNode *next;
};

마찬가지로 다음 코드에서 이런 종류의 명명 규칙을 사용하는 사람을 발견했습니다.

typedef struct HuffCode_ {

unsigned char      used;
unsigned short     code;
unsigned char      size;

} HuffCode;

사용자 코드에는 이점이 없고, 보기 흉할 뿐입니다.HuffCode_struct되었습니다로 이 지정되어 있습니다.typedef.

이것이 유용할 수 있는 유일한 장소는 다음과 같습니다.

  1. .StructName,StructName_다른 이름을 지정합니다(하지만 실제로 더 좋은 이름을 지정해야 합니다).
  2. 표준에 의해 정의되지 않은 C 표준 라이브러리의 식별자는 사용자 코드 식별자와 충돌하지 않아야 합니다.C 는 C합니다._사용자가 이를 사용하지 않기를 바라는 뜻에서 접두사를 지정합니다.안타깝게도 몇몇 사용자들은 그렇게 합니다.
  3. 아주 오래된 컴파일러에서 다음을 제공하는 것이 유용할 수 있습니다.struct름에서 .typedef. 당신은 둘 다 필요합니다.typedef연결 구조(example)를 구축하는 경우에는 다른 이름을 사용할 수 있습니다.

이것은 주로 구조와 유형이 같은 이름을 가질 수 없다는 매우 잘못된 생각 때문이라고 생각합니다.다른 말로 하자면, 어떻게든

struct MyStruct;
typedef struct MyStruct MyStruct;

할 겁니다struct고.typedef동명이인이것은 C에서는 잘못된 것입니다.구조물의 이름은 태그로 간주되는 반면 유형 정의는 유형 이름을 만듭니다.이들은 서로 다른 두 네임스페이스에 살고 있으며 충돌하지 않습니다.제 생각에는 구조물의 태그가 타입디프를 사용한다고 가정할 때 타입디프와 동일한 것이 훨씬 더 합리적이라고 생각합니다.C에서는 struct 키워드가 있는 struct를 항상 참조해야 합니다.예를 들어, 다음과 같이 정의하는 경우

구조화 MyStruct;

그러나 typedef를 만들지 마십시오. 그러면 다음이 유효하지 않습니다.

void myfunction()
{
  MyStruct var;   /* compiler error: MyStruct is not defined. */
  struct MyStruct var2; /* this is OK, MyStruct is a valid name for a struct. */
}

()의 를 MyStructC에서는 다음과 같은 유형의 디프를 제공해야 합니다.

typedef struct MyStruct MyStruct;

void myfunction2()
{
  MyStruct var;  /* this is ok now */
  struct MyStruct var2; /* this is still ok too */
}

에서는var,그리고.var2같은 유형을 가지고 있습니다. 비록 이것은 명백하지는 않지만요.실제로 유형 디프가 변경되면 동일한 유형이 더 이상 없을 것입니다.이것을 조심하세요!종류 정의가 바뀌면 몇 가지 흥미로운 버그가 발생할 수 있습니다.

C++에서 구조 정의는 본질적으로 암시적인 것을 만듭니다.typedef위의 두 코드 조각이 모두 컴파일되도록 합니다.C++에는 구조 이름(또는 태그)과 형식 이름 사이에 본질적인 차이가 없습니다.내 생각에, 그것은 두 개를 같은 방식으로 이름 짓는 또 다른 큰 이유입니다. 특히 당신이 당신의 C 모듈이 어느 시점에서 어떤 C++ 코드에 의해 사용될 것이라고 예상한다면 말입니다.

대부분의 경우 직선 C로 사람들은 자신의 구조를 그렇게 못생기지 않게 입력하는 것을 좋아합니다.그래서 그들은 구조 자체를 추한 것으로 명명하고, 유형은 깨끗한 것으로 명명합니다.일반적으로 GNU 세계에서 본 컨벤션은 다음과 같습니다.

typedef struct mytype_t
{
    int field;
    char field2;
} mytype;

두 번째 예제의 변형을 사용합니다.

typedef struct huffcode {
... } HuffCode;

학교로부터의 규약 42 (노미넷트)

typedef struct s_name
{
  ...
} t_name;

언급URL : https://stackoverflow.com/questions/5558994/naming-convention-when-using-struct-in-c

반응형