이게 무엇인가요 (())?

gcc 컴파일러 소스 코드 (gcc / c-family / c-pragma.c)를 탐색하는 동안 다음을 참조하십시오.

typedef struct GTY(()) align_stack {
  int                  alignment;
  tree                 id;
  struct align_stack * prev;
} align_stack;

그리고 저에게 많은 C 프로그래밍 (())이 있었음에도 불구하고 ,이 부분 은 아직 완전히 알려지지 않았습니다. 누군가 그 의미를 설명해 주시겠습니까? Google이 찾지 못하는 것 같습니다.



답변

그것들은 GCC 내부 “마법”, 즉 컴파일러 구현 자체의 일부입니다.

사용에 대해 설명하는 이 페이지 를 참조하십시오 . 매크로는 가비지 수집 목적으로 유형을 표시하는 데 사용됩니다. 인수도있을 수 있습니다 . 자세한 내용 은 이 페이지 를 참조하세요.

업데이트 : Drew Dorman 이 주석에서 지적했듯이 실제 이중 괄호는 GNU 구현의 “내부 성”의 일부가 아닙니다. 전체 인수 목록을 호출 된 매크로에 대한 단일 인수로 수집하려는 경우 일반적으로 사용됩니다. 이것은 예를 들어 래핑 할 때도 유용 할 수 있습니다 printf(). 이 기술에 대한 자세한 내용은이 질문을 참조하십시오 .


답변

일반적으로 쉼표를 보호하기 위해 매크로와 함께 사용됩니다. 주어진 #define foo(a,b)매크로 호출 foo(1,2,3)은 불법입니다. : 차폐 쉼표 괄호의 관계를 설명의 추가 쌍을 사용하여 foo((1,2),3)대를 foo(1,(2,3)).

이 경우 GTY는 쉼표로 구분 된 여러 인수를 사용할 수 있지만 이러한 모든 쉼표는 보호되어야합니다. 그것이 내면 ()이 모든 논쟁을 둘러싸 는 이유 입니다.


답변