나는 원칙이 아마 정의되지 않은 동작 것을 알고 있지만, 대규모 프로젝트를 처리하는 이익, 여기에 GCC에 대한 내 질문 : 내가 사용 -std=c++11
하나의 transation의 gcc -std=c++98
와 장치 및 다른 컴파일한다고 가정서로 다른 GCC 방언을 함께 연결할 수 있습니까?
똑같은 컴파일러 설치. 두 개의 오브젝트 파일을 연결하고 잘 정의 된 프로그램을 얻을 수 있다는 보장이 있습니까?
지금까지 내가, 잠재적 인 문제는 인해 다른 매크로에 대한 라이브러리 헤더의 다른 뷰에서 올 수 있고, 차례로 사람들은 기껏해야 받는 사람, 새 멤버 함수, 그러나 결코 구성원 개체를 추가 말할 수있는 표준 라이브러리 클래스.
다른 언어 언어 옵션으로 더 큰 프로젝트의 다른 부분을 컴파일하는 것이 허용됩니까?
업데이트 : 내가 직교 질문을 추가해야합니다 : 어떤 두 다른 GCC의 버전 (4.3 및 4.6를 말), 그러나 사용에 대한 WHT 같은 방언 옵션 (-std=c++98
)? 목록 in this GCC documentation은 라이브러리가 4.2.2와 4.6 사이의 양방향으로 호환 가능하다고 제안하는 것으로 보입니다.
"사람이 거의 표준 라이브러리 프로젝트에서 사용되는 전 처리기 기호로 컴파일 된 것으로 기대할 수 없다"- 그것은 경우에도, 그리고 순간 매크로 가정 :
은 또한 관련 참조 'MYPROG_CONFIG_FILE_LOCATION'이'memset.c'에서 사용되면,'memset.c'에 정의 된 의미는 프로그램에서의 의미와 완전히 관련이 없습니다. 그러므로'MYPROG_CONFIG_FILE_LOCATION'과 함께 /하지 않고'memset.c'를 컴파일하면 바이너리 호환성에 차이가 생깁니다. 그렇다면 프로그램이 MYPROG_CONFIG_FILE_LOCATION을 사용하는지 여부와 관계없이 독립적으로 수행 할 것입니다. –
@SteveJessop 예. 그것이 있었다고하더라도, 그것은 당신에게 투명해야합니다. 실제로 네임 스페이스의 모든 전처리 기 기호 (즉, 밑줄로 시작하지 않고 두 개의 밑줄을 포함하지 않음)은 안전해야합니다. 구현 네임 스페이스의 '_GLIBCXX_DEBUG'와 같은 전 처리기 심볼은 그렇지 않습니다. –