반응형
이 유효하지 않은 코드가 g ++ 6.0에서 성공적으로 컴파일되는 이유는 무엇입니까? [복제]
이 질문에 이미 답변이 있습니다.
- g ++ 3 답변으로 컴파일되는 이상한 코드
이 이상한 프로그램을 고려하십시오.
int main()
{
int(*){} Is it C++14 or any other language?
}
( 여기 및 여기 에서 라이브 데모를 참조 하십시오 .)
주석 //
이 없어도 -pedantic-errors
g ++ 6.0에서 옵션을 사용해도 오류와 경고없이 코드가 잘 컴파일됩니다 . 이것은 나에게 컴파일러 버그처럼 보입니다. 정말 컴파일러의 버그입니까?
이것은 내가 테스트 할 수있는 모든 버전에서 g ++의 버그 / 기능 / 문제로 보입니다. 달리는
int main()
{
int(*){} Is it C++14 or any other language?
}
에 godbolt.org 없이 컴파일 플래그 g ++의 모든 버전의 어셈블리 OUPUT 다음 제공합니다.
main:
pushq %rbp
movq %rsp, %rbp
movl $0, %eax
leave
ret
내가 얻는 유일한 진단은 godbolt.org 에 있습니다.
!!warning: extended initializer lists only available with -std=c++0x or -std=gnu++0x
Clang, ICC 및 MSVS는 모두 이것을 컴파일하지 못합니다.
편집하다:
코멘트에서 zwol 은 이에 대해 gcc에 버그를 제출했습니다. 버그 보고서는 여기 에서 찾을 수 있습니다 .
g++
버전을 사용 5.1.1
하여 Fedora VM에서 명령을 실행 했으며 다음을 발견했습니다.
[user:~] 1 $ g++ -fdump-tree-original-raw tmp.cpp
tmp.cpp: In function ‘int main()’:
tmp.cpp:3:11: warning: extended initializer lists only available with -std=c++11 or -std=gnu++11
int(*){} Is it C++14 or any other language?
^
그러나 그것은 여전히 컴파일에 성공했습니다 ... 그래서 나는 AST를 버리고 이것을 얻었습니다.
$ cat tmp.cpp.003t.original
;; Function int main() (null)
;; enabled by -tree-original
@1 return_expr type: @2 expr: @3
@2 void_type name: @4 algn: 8
@3 init_expr type: @5 op 0: @6 op 1: @7
@4 type_decl name: @8 type: @2 srcp: <built-in>:0
note: artificial
@5 integer_type name: @9 size: @10 algn: 32
prec: 32 sign: signed min : @11
max : @12
@6 result_decl type: @5 scpe: @13 srcp: tmp.cpp:1
note: artificial size: @10
algn: 32
@7 integer_cst type: @5 int: 0
@8 identifier_node strg: void lngt: 4
@9 type_decl name: @14 type: @5 srcp: <built-in>:0
note: artificial
@10 integer_cst type: @15 int: 32
@11 integer_cst type: @5 int: -2147483648
@12 integer_cst type: @5 int: 2147483647
@13 function_decl name: @16 type: @17 scpe: @18
srcp: tmp.cpp:1 lang: C
link: extern
@14 identifier_node strg: int lngt: 3
@15 integer_type name: @19 size: @20 algn: 128
prec: 128 sign: unsigned min : @21
max : @22
@16 identifier_node strg: main lngt: 4
@17 function_type size: @23 algn: 8 retn: @5
prms: @24
@18 translation_unit_decl
@19 identifier_node strg: bitsizetype lngt: 11
@20 integer_cst type: @15 int: 128
@21 integer_cst type: @15 int: 0
@22 integer_cst type: @15 int: -1
@23 integer_cst type: @15 int: 8
@24 tree_list valu: @2
댓글에 들어가기에는 너무 크지 만 무슨 일이 일어나고 있는지 판단하는 데 유용해야합니다. 나는 여전히 이것을 겪고 있지만 다른 사람들이 만들 수 있도록이 정보를 게시하고 있습니다.
반응형
'Programing' 카테고리의 다른 글
localhost에서 https / SSL을 어떻게 사용합니까? (0) | 2020.09.19 |
---|---|
Android에서 AES 암호화를 사용하는 모범 사례는 무엇입니까? (0) | 2020.09.19 |
app.config / web.config 내의 변수 (0) | 2020.09.19 |
C ++에 대한 Maven과 같은 종속성 관리? (0) | 2020.09.19 |
MongoDB의 다중 테넌트 데이터베이스에 대해 권장되는 접근 방식은 무엇입니까? (0) | 2020.09.19 |