[완료]C와 C++의 미세한 차이들은 뭐가 있을까요?

seungrye의 이미지

함부로 글 올리면 '검색도 안해보고 글올린다- _-'라고 하실거 같아서 검색좀 하고 글 올립니다. ㅎㅎ;

Quote:

======================================================================================
C와 C++에서 const의 또다른 차이점은 연결(linkage)이죠.

C에서는 블럭 외부에 선언된 const 개체는 static을 붙이지 않으면 외부 연결을 갖습니다. 그런데 C++에서는 extern을 붙이지 않은 const 개체는 내부 연결을 갖지요. 따라서 C++에서는 const 개체의 정의를 헤더에 넣어도 one-definition rule을 위배하지 않습니다.

예를 들어 C의 경우 배열 크기를 헤더에서 #define으로 쓸 때가 많은데, C++에서는 이러한 매크로를 const 정수형으로 완벽하게 대체할 수 있다는 뜻이죠.

결론적으로 말하자면 C는 일관성을 추구하고 있고, C++은 일관성을 희생하면서 사용의 편의성을 높였다고 할 수 있겠습니다.
//
//
//
1. C에서는 정수형을 열거형으로 대입 가능하나 C++에서는 그렇지 않습
Submitted by doldori on 화, 2005/06/07 - 10:18pm.
1. C에서는 정수형을 열거형으로 대입 가능하나 C++에서는 그렇지 않습니다.
enum color { red, blue, green };
enum color c = 1; // valid in C, invalid in C++

2. C에서 열거자(enumerator)의 형은 int이나 C++에서는 해당 열거형입니다.
enum e { A };
sizeof(A) == sizeof(int); // in C
sizeof(A) == sizeof(e); // in C++

그리고 C++에서는 반드시 sizeof(e) == sizeof(int)인 것도 아닙니다.
//
//
//
//
C는 파라미터 넘기는 법이 pass by value 와 pass by reference 가 있다고 들 하죠?
하지만 실제 C는 pass by value 만 있고
C++ 에서 pass by reference 가 추가 되었습니다.
C에서는 포인터를 넘기는 것을 pass by reference 라고 칭하긴 했지만 진정한 의미의 pass by reference가 아니지요.
& 기호는 두가지로 사용됩니다.

---------------------------------------------------------------------------------
int i = 10;
int* p = &i; //라고 할때의 i의 주소값을 나타내는 것(dereference 라고 하죠)과
*p = 11; // i 값을 11로 변경하고 싶을때
&i != &p
---------------------------------------------------------------------------------
int i = 10;
int& p = i; // 라고 할때 i의 레퍼런스 셋팅(이건 용어를 모르겠네요)할때 이지요.
p = 11; // i 값을 11로 변경하고 싶을때 (i 랑 p가 서로 같다. 한녀석이 이름을 2개 같고 있는거져)
&i == &p
---------------------------------------------------------------------------------

내부적으로 의미가 많이 다르고 퍼포먼스가 약간 차이가 나죠.
자세한건 C++ 책을 찾아 보시는 것이 좋을 듯 하네요.
//
//
//
//
c++ 과 c 의 차이입니다. C 로 작성하시려면 중간에 (변수)선언하지 마세요. -.-
//
//
//
//
C99에서는 바뀐 것으로 알고 있습니다만.. ANSI C에서는.. 구조체 선언시에
struct struct_name struct_variabel;
같은 식으로 되어야 하지 않나요? C++에서
struct_name struct_variabel;
위와 같은 형태로 선언된 코드는 하위 호환성이 없지 않을까요


======================================================================================

이런 글들을 봤습니다. C와 C++의 차이라면 보통 class, 다형성, 상속, 은닉, 오버로딩/라이딩 을 말하는데..

그런거 말고... 아주 미세한거 있잖습니까..

일테면 C에서 변수 선언은 함수의 시작부분에 해야한다. (중간에 하면 에러..-.-)
라던지.. C에서 #include는 .h를 하는데 C++에서는 .h안붙이는것도 있다..(iostream..-.-;)

이런.. 알아두면 어쩌면 도움될지도 모르고 몰라도 상관없는 그런것들이 뭐뭐가 있을까요?

음.. 네. 사실 이거 학교 숙젭니다-.-;
(이게 숙제는 아니고 두 언어를 비교하는게 숙제인데, 제가 C와 C++을 잡았는데.. 이런 미세한 차이점에 대해 나온것은 별로 없는듯 해서 질문 드립니다. 뭐뭐로 어디서 검색해 봐라 하셔도 좋습니다.(__);)

==
위키백과에 많이(...?) 있네요 감사 합니다.(__)

gamdora의 이미지

* C에서는 sizeof('c') == sizeof(int)지만 C++에서는 sizeof('c') == sizeof(char)입니다.
* C에서는 func()와 func(void)가 다른 뜻이지만 C++에서는 같은 뜻입니다.

gamdora의 이미지

저도 덩달아 궁금해져서 찾아보니 이런 게 나오네요.

http://en.wikipedia.org/wiki/Compatibility_of_C_and_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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.