C++ 언어는 C와 함께 객체 지향 개념과 같은 몇 가지 추가 기능을 추가하여 설계되었습니다. 대부분의 C 프로그램은 C++ 컴파일러도 사용하여 컴파일할 수 있습니다. C++ 컴파일러를 사용하여 컴파일할 수 없는 일부 프로그램이 있지만.
C 컴파일러에서는 컴파일되지만 C++ 컴파일러에서는 컴파일되지 않는 일부 코드를 살펴보겠습니다.
이 프로그램에는 C++ 코드에 대한 하나의 컴파일 오류가 있습니다. 이전에 선언되지 않은 함수를 호출하려고 하기 때문입니다. 그러나 C에서는 컴파일될 수 있습니다.
C.
예시
#include<stdio.h> int main() { myFunction(); // myFunction() is called before its declaration } int myFunction() { printf("Hello World"); return 0; }
출력(C)
Hello World
출력(C++)
[Error] 'myFunction' was not declared in this scope
C++에서는 하나의 일반 포인터가 일부 상수 변수를 가리킬 수 없지만 C에서는 가리킬 수 있습니다.
C.
예시
#include<stdio.h> int main() { const int x = 10; int *ptr; ptr = &x; printf("The value of x: %d", *ptr); }
출력(C)
The value of x: 10
출력(C++)
[Error] invalid conversion from 'const int*' to 'int*' [-fpermissive]
C++에서는 int*, char*와 같은 다른 포인터 유형을 void 포인터에 할당하려는 경우 명시적으로 유형 변환해야 하지만 C에서는 유형 변환되지 않으면 컴파일됩니다.
C.
예시
#include<stdio.h> int main() { void *x; int *ptr = x; printf("Done"); }
출력(C)
Done
출력(C++)
[Error] invalid conversion from 'void*' to 'int*' [-fpermissive]
C++에서는 상수 변수를 초기화해야 하지만 C에서는 초기화 없이 컴파일할 수 있습니다.
C.
예시
#include<stdio.h> int main() { const int x; printf("x: %d",x); }
출력(C)
x: 0
출력(C++)
[Error] uninitialized const 'x' [-fpermissive]
C에서는 'new'라는 변수를 사용할 수 있습니다. 그러나 C++에서는 이 이름을 변수 이름으로 사용할 수 없습니다. C++에서는 'new'가 키워드이기 때문입니다. 메모리 공간을 할당하는 데 사용됩니다.
C.
예시
#include<stdio.h> int main() { int new = 10; printf("new: %d",new); }
출력(C)
new: 10
출력(C++)
[Error] expected unqualified-id before 'new' [Error] expected type-specifier before ')' token
C++에서 다음 코드를 컴파일할 수 없습니다. int를 char*로 변환하려고 하면 오류가 반환됩니다. 그러나 C에서는 잘 작동합니다.
C.
예시
#include<stdio.h> int main() { char *c = 123; printf("c = %u", c); }
출력(C)
c = 123
출력(C++)
[Error] invalid conversion from 'int' to 'char*' [-fpermissive]
C에서는 void를 main()의 반환 유형으로 사용할 수 있지만 C++에서는 int를 main()의 반환 유형으로 사용해야 합니다.
C.
예시
#include<stdio.h> void main() { printf("Hello World"); }
출력(C)
Hello World
출력(C++)
[Error] '::main' must return 'int'