간단한 "Hello World"스타일 프로그램이 Turbo C ++로 컴파일되지 않는 이유는 무엇입니까?


101

프로그래밍 수업을 위해 C ++를 배우기 시작했습니다. 이 "Hello World"프로그램을 다운로드했습니다.

#include <iostream>
using namespace std;

int main() 
{
    cout << "Hello, World!";
    return 0;
}

그러나 Turbo C ++는 다음과 같이 불평합니다.

Error D:\HELLO.CPP 1: Unable to open include file 'IOSTREAM'
Error D:\HELLO.CPP 2: Declaration syntax error
Error D:\HELLO.CPP 6: Undefined symbol 'cout'

이 아주 간단한 프로그램의 문제점은 무엇입니까? 이러한 오류를 어떻게 수정할 수 있습니까?


39
이것은 Turbo C ++ 문제에 대해 묻는 질문에 대한 표준 복제 리디렉션입니다. 이러한 질문 중 상당수는 댓글에 간단한 설명만으로 빠르게 요약되는 경향이 있지만 실제로는 적절한 답변을 사용할 수 있습니다. 개선을 환영합니다.
n. '대명사'm.

6
사용중인 Turbo C ++ 릴리스를 언급하는 것이 좋습니다. 2006 년 버전은이 프로그램에 대응했습니다.
MM

5
"저는 프로그래밍 수업을 위해 C ++를 배우기 시작했습니다." 이것은 거짓말입니다. 기간.
bugwheels94 jul.

5
@ bugwheels94 이것을 보십시오 .
n. '대명사'm.

5
bugwheells이 의미하는 경우 나도 몰라 @nm,하지만 난 하나를 가르쳐 경우 의미하도록했다 TurboC는 ++ , 그들은 학습되지 않습니다 (이 컴파일에 실패, 특히 오래된 TurboC ++에서) C ++ (많은 사람들이, 나를 포함 , 암시 적으로 표준 C ++ 를 의미한다고 가정 ).
eerorika

답변:


158

이 프로그램에는 문제가 없습니다. (아마도 일부 문체 문제를 제외하고- using namespace std권장하지 않습니다). 문제는 Turbo C ++에 있습니다. 아주 오래된 소프트웨어입니다. 이것은 천년 초반에 완전히 사용이 중단 된 소위 ANSI C ++ 이전 의 C ++ 방언을 구현합니다 . C ++에 대한 최초의 ANSI 표준은 1998 년에 발표되었으며 2003 년 버전, 2011 년 버전, 2014 년 버전, 2017 년 버전이 있었고 이제 2020 년 버전이 공식적으로 게시 될 것으로 예상됩니다. 이러한 각 표준 개정은 언어에 다소 중요한 변경을 가져 왔습니다.

Turbo C ++의 경우 다음과 같이 프로그램을 수정해야합니다.

#include <iostream.h>      // note the .h suffix
// using namespace std;    // Turbo C++ doesn't implement namespaces

int main() 
{
    cout << "Hello, World!";
    return 0;
}

이 프로그램을 살펴보면 최신 C ++ 방언과 Turbo C ++에서 허용하는 방언의 차이가 작게 보일 수 있습니다. 그러나 프로그램이 더 복잡 해짐에 따라 훨씬 더 커질 것입니다.

Turbo C ++를 사용하여 프로그래밍을 배울 수 있지만 다음과 같은 문제로 인해 가능한 경우이를 피하는 것이 좋습니다.

  1. 업계에서 널리 사용되는 언어와 다소 유사한 언어를 배우게 될 것입니다. 그럼에도 불구하고 별다른 이유없이 매우 다릅니다. 실제 소프트웨어 개발을 위해 C ++를 작성할 계획이라면 많은 것을 다시 배워야합니다. 최신 C ++를 즉시 배우는 것이 훨씬 쉽습니다.
  2. Turbo C ++에 대한 현존하는 문헌이 없습니다. 인터넷이나 책에서 찾을 수있는 거의 100 %의 C ++ 자료는 즉시 Turbo C ++에 직접 적용 할 수 없습니다. 일부는 약간의 조정 만 필요하지만 다른 자료는 완전히 사용할 수 없습니다. 즉시 사용할 수있는 유일한 도움말은 내장 된 Turbo C ++ 도움말입니다.
  3. Turbo C ++를 기억하는 사람은 거의 없습니다. 포럼에서 질문을 할 때 항상 최신 버전의 언어에 맞는 응답을 필터링하기 위해 ANSI 이전 방언을 사용하고 있음을 지정하십시오. 즉시 중단하고 질문 할 때마다 최신 컴파일러로 전환 할 것을 제안하는 많은 주석을 받게 될 것입니다.

많은 현대 무료 (같이있다 맥주 뿐만 아니라에서 연설 ) 컴파일러 및 터보 C ++ 대신에 사용할 수있는 십오. 이들 중 일부는 다음과 같습니다.

  1. Visual C ++ Community Edition 은 Microsoft의 IDE 및 컴파일러입니다.
  2. Code :: Blocks 는 경량 IDE입니다. Windows에서는 다소 오래된 컴파일러와 함께 제공되지만보다 최신 컴파일러를 직접 설치할 수 있습니다.
  3. Eclipse CDT 는 강력한 크로스 플랫폼 IDE입니다. 자체 컴파일러와 함께 제공되지 않으므로 별도의 컴파일러를 설치해야합니다. Windows에서는 예를 들어 MinGW를 사용하십시오 .
  4. 더 많은
  5. 또한, 같은 많은 온라인 컴파일러가 http://ideone.com , https://www.onlinegdb.com/http://coliru.stacked-crooked.com/ , 플러스 많은은 (이들은 대부분 좋은 아이디어를 시도하고 아주 작은 프로그램을 작성하기 위해).
  6. Clang / LLVMGCC 는 모두 최신 버전의 C ++를 지원하는 무료 소프트웨어 컴파일러입니다.

안타깝게도 일부 학교 / 교사는 학생들이 오늘날에도 Turbo C ++를 사용하도록 강요하는 것으로 보입니다. 불행히도 이것은이 커뮤니티가 해결할 수있는 문제가 아닙니다. 이런 상황에 처해 있다면 외부 도움을 많이받을 수 없도록 준비하십시오.


7
@ Rakete1111 "이 프로그램은 현재 표준에 따라 문제가 없습니다."라는 의미에 더 가깝다고 생각합니다. 좋은 프로그래밍 스타일인지 여부는 또 다른 문제입니다.
Sombrero Chicken

21
@ Rakete1111 책임감있는 사용에 문제가 없습니다 using namespace std. 새로운 프로 게이머들에게 그것을 가르치는 것은 좋은 교육 학적 결정일 수도 있고 아닐 수도 있지만, 그 자체로 도덕적으로 잘못된 것은 아닙니다.
n. '대명사'm.

10
나는 그것이 using namespace std나쁜 습관 이라는 데 동의 하지만 온라인에서 찾은 C ++ hello world 프로그램이 거의 항상 수행하기 때문에이 질문에 속한다고 생각합니다. 따라서 이것이 Turbo C ++를 불행하게 만드는 것이 아니라는 점을 분명히하는 것이 중요합니다. "이 프로그램에는 문제가 없습니다."대신 " 현재 C ++ 표준 에 따르면이 프로그램은 유효 합니다. 컴파일해야합니다."라고 말할 수 있습니다.
zwol

5
@Puppy를 동일한 토큰으로 사용하면 표준 함수에 대한 모든 호출은 무책임합니다. 어떤 새로운 오버로드가 추가 될지 모르기 때문입니다. 또한 다음 표준에서 사라지거나 의미가 변경되는 언어 기능을 알지 못합니다. 모든 프로그램이 수십 년 동안 유지되거나 임의의 컴파일러로 이식 될 필요는 없습니다.
n. '대명사'm.

6
"Turbo C ++를 기억하는 사람은 거의 없습니다 . " 나는 동의하지 않습니다. 적어도 하나의 큰 나라 전체가 오늘 그것을 적극적으로 가르치고 있습니다 .
궤도

11

"Turbo C ++"는 수많은 컴파일러를 의미 할 수 있습니다. 이 질문을 할 때 버전 번호를 포함하는 것이 중요합니다.

  • 버전 3.1까지의 Borland Turbo C ++는 고전적인 파란색 배경 IDE의 순수한 MS DOS 컴파일러였습니다. 이것들은 1998 년에 C ++가 표준화되기 훨씬 전인 1989 년에서 1992 년 사이에 대략적으로 발표되었습니다. 그래서 그들은 C ++의 사전 표준 방언을 사용했습니다.

    가장 주목할만한 점 #include <iostream.h>은 표준이 아닌 구문 을 사용 #include <iostream>했지만 네임 스페이스, 템플릿 등과 같은 C ++ 기능을 모두 다루지 않았습니다. 템플릿 라이브러리 STL은 아직 표준의 일부가 아니기 때문에 해당 라이브러리와 관련된 모든 것이 예뻤습니다. 나중에 표준이 된 것과 다릅니다.

  • 90 년대 후반에 볼랜드는 더 나은 적합성을 가진 여러 DOS / Windows 컴파일러를 출시했습니다. 버전 5까지 어딘가에서는 C ++ 98을 완벽하게 준수하는 데 어려움을 겪었지만 이러한 Windows 버전은 상당히 비슷했습니다.

  • 90 년대 후반, 그들은 단지 IDE가 아니라 Delphi를 기반으로 한 완전한 RAD 도구 인 Borland C ++ Builder를 위해 "Turbo C ++"라는 이름을 삭제했습니다. 이러한 컴파일러는 C ++ 98 이상 C ++ 03과 완전히 호환되었습니다.

  • 2005 년경 Borland는 제품 라인의 일부로 컴파일러를 삭제했습니다. 컴파일러는 "Codegear"가되었고 나중에 Embarcadero가되었습니다. 그 무렵, 그들은 "Turbo C ++"라는 이름의 Borland Builder 무료 버전을 출시했습니다. 이 버전은 C ++ 03을 완전히 준수했습니다.

  • 요즘에는 이러한 컴파일러를 Embarcadero C ++ Builder라고합니다. 현재 일부 C ++ 14에서 C ++ 11까지 지원한다고 생각합니다. 여기에 더 많은 정보가 있습니다.

말할 필요도없이, 학생으로서 당신은 현대적인 컴파일러 외에는 아무것도 사용해서는 안됩니다. 2018 년에 C ++를 배울 때 1991 년부터 MS DOS 컴파일러를 사용하는 것은 단순히 광기입니다. 비생산적 일뿐만 아니라 직접적으로 해롭고 나쁜 C ++ 프로그래머가됩니다. 학교에서 Turbo C ++ 3.1 또는 이전 버전을 사용하도록 강요하는 경우 학교가 나쁘고 교사는 무능합니다. 이 게시물을 그들과 그들의 교장에게 링크하십시오.


Turbo C ++는 2020 년에도 인도에서 여전히 일반적입니다 . - . 즉, 40 세의 "오래된 터보 C. 인도 대학은 여전히 다른 가르쳐 아무것도에와 쓰레기를 가르치는 그들은 나에게 제로 점수를 준, 내가 사용하기 때문에 std::string대신 char *시험에서, 그들은 C ++의 표준화 것을 모르고 있기 때문에 char *더 이상 사용되지 않습니다. " .
Peter Mortensen

@PeterMortensen 예 ... C90을 가르치는 것은 다소 괜찮습니다 (재미있게도 2020 년의 Visual Studio보다 여전히 낫습니다).하지만 사용 된 C ++ 방언은 그냥 건초였습니다.
Lundin

7

Turbo C ++는 매우 오래된 컴파일러이며 GNU C ++ 컴파일러와 약간 다릅니다. 당신이 GNU 컴파일러와 함께 완벽하게 작동하지만 터보 C와 함께 실행하는 공유 코드는 ++ 당신이 몇 가지 변경해야 :

에서 1. 변경 헤더 파일의 이름을 iostreamiostream.h
2. 그리고 라인 "네임 스페이스를 사용하여 표준"을 제거 그것은 아니다 Turbo C ++에서 필요합니다. 수정 된 코드는 다음과 같습니다.

#include <iostream.h>

int main() 
{
  cout << "Hello, World!";
  return 0;
}

6
당신의 대답은 받아 들여진 것이 아니라고 덧붙이는 것은 무엇입니까?
Rakete1111

7
긴 답변을 읽을 시간이없는 사람들을위한 요점.
Yougansh Thakur

"조금 다르지"않지만 C ++ 컴파일러와는 크게 다릅니다
phuclv
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.