C/C++ 완전 기초질문입니다. freeBSD환경에서 배우려는데 질문이 많습니다.ㅠ

freebsd626의 이미지

안녕하세요.

본격적으로 C/C++를 배워보려고 하는데요.
개인 사정상 freeBSD(리눅스랑 거의 흡사하다고하는데) 운영체제에서 학습해야할것같습니다.

좋은 학습방법인지는 모르겠네요.그런데 해야만하는상황이라ㅠ
윈도우/맥/ 각종 컴파일러들이 많은데...그때마다 뭔가 많이 바껴서 새로배워야할지 두렵네요.

이제 프로그래밍 입문하는거라 질문이 프로그래밍세계에서 쓰는 어법에 안맞을수 있으니 말안되는 질문해도 찰떡같이 알아주시길 바랍니다.ㅠ

1. gcc 컴파일러가 C/C++ 표준인가요?

2. 그러면, freeBSD 에서 gcc로 C/C++를 숙달했을때..이 코드그대로 다른 컴파일러(?)나 프로그래밍툴(?)에서(비주얼C++나..
Dev C++ 등등 기타 C/C++ 툴등등) 써먹을때는 라이브러리/함수 수정이나 기타등등의 뭔가 복잡한 변경을안해도되는건지요??

3. 궁극적으로 C++을 익혀야만하는데...C언어부터 시작하는건 도움되는건가요 방해되는건가요? C랑 C++뭐가 다른건지도 아직 헥갈립니다.

4. 리눅스가 아니라 freeBSD 환경에서 주로 프로그래밍해야하는데...리눅스에서 작업하게될때 뭔가 많은 시행착오가 다시 생길까요?
그리고, freeBSD나 리눅스환경에서 '만' C/C++ 을 익히고....갑작히 윈도우나 다른 환경에서 C/C++ 코딩을 해야할때
얼마나 많이 달라지는건가요? 짜잘한(?)거부터 새로 수정하고 익혀야하는지요??

5. 이공계연구때문에 궁극적으론 방대한 수치해석계산을 돌려야하는데...
Fortran 이 더 빠른가요 C/C++이 더 빠른가요? 주워듣기론 Fortran이 미세하게 빠르다는데..C++에 비해 원시언어라...고급객체지향기술(?)이 없다고해서
사장된다던데..걍 C++만 익혀도 무관한가요? 두개 배우기 귀찮아서요 ㅠㅠ

앞으로 질문 왕창할텐데 부듸 잘봐주시기바랍니다...꾸벅

klyx의 이미지

1. 컴파일러가 표준이냐는 질문은 의미가 없습니다. 제대로된 질문은 '~ 컴파일러가 표준을 (제대로) 지원하냐'입니다. 그리고 답변은 지원한다입니다.
단, 최신 표준을 원하는 경우에는 -std=c99 또는 -std=c++11 같은 옵션을 붙여줘야합니다.

2. 순수하게 표준라이브러리만을 이용한 경우에는 '원리적으로는' 그렇습니다. 단 표준도 제대로 지원못하는 쓰레기같은 VC++6버전같은거에는 해당되지 않습니다. 표준 라이브러리가 아닌 추가적인 라이브러리를 사용했을 경우에는 그 추가된 라이브러리에서 다른걸 요구하면 그걸 맞춰줘야합니다.

3. 도움됩니다. C++은 C를 (거의)다 포함한다고 생각하시면 됩니다.

4. 어떤 작업이냐에 따라 다릅니다. 어플리케이션이라면 크게 영향을 안받을 수 있습니다. 시스템 프로그래밍이라면 영향을 받을 수 있습니다. 반대로 어플리케이션이라도 (시스템 의존적인 부분이 많다면) 영향을 받을 수도 있고, 시스템 프로그래밍이라고해도 Linux/UNIX 공통의 POSIX API만 쓴다면 영향을 안받을 수도 있습니다. 다시 강조하지면 뭘하느냐에 따라 다릅니다.

5. C++만해도 됩니다. 근데 최종목표가 그거고 주변에 fortran 조언해줄 사람이 있다면 그냥 C++하지 말고 fortran하세요. C++보다 훨씬 쉽습니다.

freebsd626의 이미지

컴파일러가 표준을 지원하냐 마냐의 문제라 하셨는데요.

이때 표준이란건 표준 라이브러리를 말하는건가요? 아니면 다른 무언가의 표준이 또 더 있는건가요?

표준이란게 정확히 뭔지 모르겠습니다.

표준라이브러리인지 아닌지는 초보가 어떻게 알수가 있나요?

마지막으로, 어플리케이션이랑 시스템의존 부분에 따라 영향이 있다고 하셨는데...

어플리케이션이랑 시스템 프로그램이 뭔가요? 개초보라 아무것도 모릅니다..

klyx의 이미지

표준이라고 하는건 ISO에서 지정하는 언어의 표준 명세를 말합니다.
이 표준 명세에는 언어의 키워드같은 문법적인 요소와 표준라이브러리 모두가 포함됩니다.
표준 라이브러리인지 아닌지는 원론적으로는 표준 명세에 들어있으면 표준인거고 안들어있으면 아닌건데, 그냥 대충 인터넷 찾아보면 나옵니다.
일반적으로 입문서에서 나오는 내용은 다 표준에 들어간다고 생각하셔도 좋습니다.
표준도 한번 제정되면 그대로인게 아니라 계속해서 개정되기 때문에 한번 알아두면 끝인게 아닙니다.
그러니 더더욱 인터넷에서 찾아보는 능력을 기르셔야합니다.
어플리케이션과 시스템 프로그램이 뭔지 궁금하시면 한번 찾아보셨어요? 이기회에 한번 찾아보세요.

freebsd626의 이미지

많은 도움주셔서 감사합니다.!!!

익명 사용자의 이미지

> 1. gcc 컴파일러가 C/C++ 표준인가요?

이미 좋은 대답이 나왔으니 패스.

> 2. 그러면, freeBSD 에서 gcc로 C/C++를 숙달했을때..이 코드그대로 다른 컴파일러(?)나 프로그래밍툴(?)에서(비주얼C++나..
Dev C++ 등등 기타 C/C++ 툴등등) 써먹을때는 라이브러리/함수 수정이나 기타등등의 뭔가 복잡한 변경을안해도되는건지요??

표준 라이브러리만 사용하신다면 전혀 변경 없이 그대로 사용할 수 있습니다.
비표준 라이브러리도 크로스 플랫폼 라이브러라면 문제 없습니다.
예를 들어 de facto standard인 boost 라이브러리같은 것을 사용하신다면 플랫폼을 바꿔도 별 문제 없습니다.
수치해석이 주로 하실 일이라면 OS의존적인 기능을 사용할 필요가 별로 없고
사용하실 라이브러리가 대부분 크로스 플랫폼일 가능성이 높습니다.

> 3. 궁극적으로 C++을 익혀야만하는데...C언어부터 시작하는건 도움되는건가요 방해되는건가요? C랑 C++뭐가 다른건지도 아직 헥갈립니다.

C를 먼저 따로 익히는 것은 좋은 생각이 아닙니다. (C++ 입장에서 볼 때에) 잘못된 습관이 들 가능성이 큽니다.
C와 C++은 그냥 다른 언어라고 생각하시는 것이 좋습니다.
C++이 C의 많은 부분을 그대로(또는 조금 다르게) 포함하고 있지만 C와 C++은 워낙 프로그래밍 스타일이 다릅니다.
C 방식으로 할 수 있는 것들을 C++에서는 다른 방법으로 하는 경우가 많으니 C를 먼저 공부하면 오히려 C++을 익히는 데에 방해가 될 수 있습니다.

> 4. 리눅스가 아니라 freeBSD 환경에서 주로 프로그래밍해야하는데...리눅스에서 작업하게될때 뭔가 많은 시행착오가 다시 생길까요?
그리고, freeBSD나 리눅스환경에서 '만' C/C++ 을 익히고....갑작히 윈도우나 다른 환경에서 C/C++ 코딩을 해야할때
얼마나 많이 달라지는건가요? 짜잘한(?)거부터 새로 수정하고 익혀야하는지요??

앞서 말씀드렸듯이 리눅스와 freeBDS은 수치해석 입장에서는 사실상 같다고 보셔도 됩니다.
윈도에서도 gcc를 사용하신다면 마찬가지입니다. 달라지는 것이 별로 없습니다.
윈도에서 visual c++을 사용하시려면 짜잘한 것만 (컴파일러 옵션, IDE 사용법등 ..) 조금 익히시면 문제 없습니다.

> 5. 이공계연구때문에 궁극적으론 방대한 수치해석계산을 돌려야하는데...
Fortran 이 더 빠른가요 C/C++이 더 빠른가요? 주워듣기론 Fortran이 미세하게 빠르다는데..C++에 비해 원시언어라...고급객체지향기술(?)이 없다고해서
사장된다던데..걍 C++만 익혀도 무관한가요? 두개 배우기 귀찮아서요 ㅠㅠ

C/C++이 대세입니다. 기존에 fortran을 주로 사용하던 연구 그룹들도 C++로 바꾸는 추세입니다. 물론 안 그런 곳도 있지요.
혹시 연구실 선배들이 물려준 프로그램들이 fortran으로 되어있지는 않은 지 또는
공부하시는 분야에서 많이 쓰이는 툴이 fortran으로 되어있지는 않은 지 확인해보세요.
그런 게 있다면 어쩔 수 없이 fortran을 익히셔야 할 수도 있습니다. 그런 제약이 없다면 C++만 익히셔도 충분합니다.

익명 사용자의 이미지

추가로 포트란과 C++의 속도에 대해서는
http://benchmarksgame.alioth.debian.org/u64q/benchmark.php?test=all&lang=gpp&lang2=ifc&data=u64q
를 참고하세요. 많은 사람들을 통해 검증된 코드로 테스트된 것이니 믿으셔도 됩니다.
물론 이 10여개의 테스트만 가지고서 일반적인 결론을 내리는 것이 위험하기는 하지만
포트란과 C++의 속도 차이는 이제 거의 없습니다. (조금 강한 주장일 수도...^^;)
또는 (약한 주장으로) 예전에 비하면 아주 많이 줄어들었다고 생각하셔도 됩니다.
여하튼 포트란이냐 C++이냐는 말씀드린대로 일단은 일하시는 분야의 환경,문화가 중요합니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.