programing

GCC의 __attribute__(...) 구문이 이중 괄호를 사용하는 이유는 무엇입니까?

goodsources 2023. 6. 30. 22:19
반응형

GCC의 __attribute__(...) 구문이 이중 괄호를 사용하는 이유는 무엇입니까?

GCC 구문에 대한 설명서는 속성이 이중 괄호로 둘러싸야 함을 나타내지만, 이 설계 결정에 대한 근거를 제공하지는 않습니다.

GCC의 설계자들이 이것을 요구하게 된 실질적인 이유는 무엇이었을까요?전처리기가 이중 괄호를 처리하는 것과 관련이 있습니까?

다른 컴파일러에서 제거하는 것을 더 쉽게 하기 위해.만약 당신이 휴대용 코드를 가지고 있다면, 당신은 다른 컴파일러들을 위해 그것들을 제거해야 합니다, 그래서 당신은 그렇게 합니다.

#ifndef __GNUC__
#define __attribute__(x)
#endif

문제는 속성에 다양한 수의 인수가 있고 여러 속성을 하나로 결합할 수 있다는 것입니다.__attribute__선언, 그러나 C는 C99에 가변 매크로만 도입했습니다.이중 괄호를 사용하는 경우 위의 정의에는 가변 매크로가 필요하지 않습니다.

아마도 다른 C와 C++ 컴파일러에서 이 모든 것을 무시하는 데 도움이 되는 간단한 매크로를 선언할 수 있다는 것이 그 아이디어일 것입니다.만약 당신이 두 번째 괄호 쌍을 가지고 있지 않다면, 그 매크로는 반드시 다음과 같은 것이 될 것입니다....지원하지 않는 컴파일러의 경우에는 망하게 됩니다.

편집: 이 구문을 사용하면 다음과 같이 보일 수 있습니다.

#ifdef __GNUC__
# define attribute(X) __attribute__(X)
#else
# define attribute(X)
#endif

그리고 나서 당신은 사용할 것입니다.attribute예를 들어, 기능 선언에 대해 설명합니다.

언급URL : https://stackoverflow.com/questions/7345346/why-does-gccs-attribute-syntax-use-double-parentheses

반응형