반응형
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
반응형
'programing' 카테고리의 다른 글
Spring @ConditionalOnProperty, 누락된 경우에만 일치시키는 방법 (0) | 2023.06.30 |
---|---|
Excel에서 데이터 점 보간 (0) | 2023.06.30 |
코드의 최신 버전을 얻으려면 어떻게 해야 합니까? (0) | 2023.06.30 |
긴 형식에서 넓은 형식으로 데이터를 재구성하는 방법 (0) | 2023.06.30 |
@Springboot의 값이 null을 반환합니다. (0) | 2023.06.30 |