스택큐힙리스트

"auto"를 사용하는 선언은 구체적인 유형 지정자를 사용하는 extern 선언과 일치합니까? 본문

카테고리 없음

"auto"를 사용하는 선언은 구체적인 유형 지정자를 사용하는 extern 선언과 일치합니까?

스택큐힙리스트 2023. 11. 27. 12:09
반응형

다음의 프로그램을 고려해보십시오:


extern int x;
auto x = 42;
int main() { }

Clang 3.5는 이를 수용합니다 (실시간 데모), GCC 4.9와 VS2013는 그렇지 않습니다 (전자에 대한 실시간 데모). 누가 맞고 C++ 표준에서 올바른 동작이 어디에 명시되어 있는지 알려주십시오.

답변 1

모든 유형의 조정 후는 이와 관련된 모든 질문을 처리해야 한다. 그러므로, 나의 해석은 auto의 참여가 본질적으로 이것의 유효한 재선언 (및 정의)임을 말해주며, Clang이 옳다고 생각한다. auto가 유형의 조정으로 간주되지 않더라도 진단이 필요하지 않기 때문에, 최악의 경우 모든 명시된 구현은 각자의 방식으로 호환성이 있습니다.


저는 GCC와 Visual Studio가 다음을 영감으로 삼고 있다고 믿습니다:



[C++11: 7.1.6.4/5]: 이 섹션에서 명시적으로 허용되지 않은 맥락에서 auto를 사용하는 프로그램은 잘못 구성되었습니다.


...하지만 이것은 공격적이라고 생각합니다. 표준 언어가 평범한 재선언 규칙을 금지하려는 것은 아마도 7.1.6.4에서 반복되거나 명시적으로 참조되지 않기 때문일 것 같지 않습니다.


C++14은 추론된 유형을 가진 함수의 선언과 관련된 문구를 추가합니다:



[C++14: 7.1.6.4/13]: 플레이스홀더 유형을 사용하는 선언된 반환 유형을 가진 함수 또는 함수 템플릿의 재선언 또는 특수화는 해당 플레이스홀더를 사용해야 하며, 추론된 유형을 사용해서는 안 됩니다. [...]



대칭성에 따라 int의 경우, GCC와 VS가 프로그램을 거부하는 것이 올바른 것으로 의도된 것일 수 있다고 제안할 수 있습니다. 그러나, 이는 다른 기능입니다 (추론은 단순 선언에 적용할 수 없으므로) 따라서 다른 시나리오입니다.


어느 방법이든, 향상된 표준 문구가 이 부분에서 도움이 될 것입니다. 이것은 [비교적 작은] 기술적 결함이라고 생각합니다.

답변 2

Title: auto 키워드를 사용한 선언은 구체적인 형식 지정자를 사용하는 extern 선언과 일치하는가?
Introduction:
'auto' 키워드는 C++11 이후 도입된 기능으로, 컴파일러가 변수 형식을 자동으로 추론하도록 하는 데 사용됩니다. 반면에 'extern' 선언은 변수의 외부 정의가 다른 파일에 있다는 것을 나타내며, 전역 변수를 선언할 때 사용됩니다. 이 두 선언 방식이 일치하는지에 대해 알아보고자 합니다.
Keywords: auto, extern, 선언, 형식, 추론, 변수, 외부 정의, C++
Body:
1. 'auto' 키워드
- 'auto' 키워드는 변수의 형식을 자동으로 추론하도록 하는 키워드입니다.
- C++11에서 도입되어, 코드 작성의 간결성과 가독성을 높여줍니다.
- 'auto' 키워드를 사용하면 컴파일러가 변수의 초기화 식을 분석하여 형식을 유추합니다.
2. 'extern' 선언
- 'extern' 키워드는 변수의 외부 정의가 다른 파일에 있다는 것을 선언하는 역할을 합니다.
- 전역 변수를 선언할 때 사용되며, 해당 변수가 다른 파일에 정의되어 있다는 것을 알려줍니다.
- 다른 파일에 있는 변수의 값에 접근할 때 유용합니다.
3. auto 선언과 extern 선언의 차이
- 'auto' 선언은 변수의 형식을 자동으로 추론하므로, 초기화 식에 의존합니다.
- 'extern' 선언은 외부 파일에 있는 변수의 정의를 찾아서 링킹하는 데 사용됩니다.
- 이 두 선언 방식은 목적과 사용 범위가 서로 다릅니다.

4. auto 선언과 extern 선언의 일치 여부
- auto 키워드는 변수의 형식을 자동으로 추론하므로, 추론된 형식과 초기화 식의 형식이 일치해야 합니다.
- 따라서, auto 선언은 extern 선언과 비교할 때 구체적인 형식 지정자와는 일치하지 않습니다.
Conclusion:
'auto' 키워드를 사용한 선언은 구체적인 형식 지정자를 사용하는 'extern' 선언과 일치하지 않습니다. 'auto' 키워드는 변수의 형식을 자동으로 추론하여 간결하고 가독성 높은 코드를 작성할 수 있게 해주지만, 'extern' 선언과는 목적과 사용 범위가 다릅니다. 올바른 변수 선언 방식을 선택하는 것이 중요하며, 개발자는 코드의 목적과 해당 변수가 사용될 위치에 따라 적절한 선언 방식을 결정해야 합니다.
Keywords: auto, extern, 선언, 형식, 추론, 변수, 외부 정의, C++

반응형
Comments