일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 2
- 클라우드컴퓨팅
- 빅데이터
- 코딩
- 컴퓨터공학
- 네트워크
- 알고리즘
- 딥러닝
- 웹개발
- 컴퓨터과학
- 사이버보안
- 자료구조
- 버전관리
- 프로그래밍언어
- 소프트웨어
- 네트워크보안
- 데이터분석
- Yes
- 컴퓨터비전
- 파이썬
- 소프트웨어공학
- 프로그래밍
- 데이터구조
- I'm Sorry
- 데이터베이스
- 보안
- 인공지능
- 자바스크립트
- 데이터과학
- 머신러닝
- Today
- Total
스택큐힙리스트
"auto"를 사용하는 선언은 구체적인 유형 지정자를 사용하는 extern 선언과 일치합니까? 본문
다음의 프로그램을 고려해보십시오:
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++