Computer >> Máy Tính >  >> Lập trình >> lập trình C

Chương trình C sẽ không biên dịch bằng C ++

Ngôn ngữ C ++ được thiết kế bằng cách thêm một số tính năng bổ sung như khái niệm Hướng đối tượng với C. Hầu hết các chương trình C cũng có thể được biên dịch bằng trình biên dịch C ++. Mặc dù có một số chương trình không thể được biên dịch bằng trình biên dịch C ++.

Hãy để chúng tôi xem một số mã, sẽ được biên dịch trong trình biên dịch C, nhưng không phải trong trình biên dịch C ++.

Trong chương trình này sẽ có một lỗi biên dịch cho mã C ++. Bởi vì nó đang cố gắng gọi một hàm không được khai báo trước đó. Nhưng trong C, nó có thể biên dịch

Đối với C.

Ví dụ

#include<stdio.h>
int main() {
   myFunction(); // myFunction() is called before its declaration
}
int myFunction() {
   printf("Hello World");
   return 0;
}

Đầu ra (C)

Hello World

Đầu ra (C ++)

[Error] 'myFunction' was not declared in this scope

Trong C ++, một con trỏ bình thường không thể trỏ một số biến hằng số, nhưng trong C, nó có thể trỏ.

Đối với C.

Ví dụ

#include<stdio.h>
int main() {
   const int x = 10;
   int *ptr;
   ptr = &x;
   printf("The value of x: %d", *ptr);
}

Đầu ra (C)

The value of x: 10

Đầu ra (C ++)

[Error] invalid conversion from 'const int*' to 'int*' [-fpermissive]

Trong C ++, chúng ta phải đánh máy rõ ràng khi muốn gán một số kiểu con trỏ khác như int *, char * cho con trỏ void, nhưng trong C, nếu nó không phải là kiểu ép kiểu, nó sẽ được biên dịch.

Đối với C.

Ví dụ

#include<stdio.h>
int main() {
   void *x;
   int *ptr = x;
   printf("Done");
}

Đầu ra (C)

Done

Đầu ra (C ++)

[Error] invalid conversion from 'void*' to 'int*' [-fpermissive]

Trong C ++, chúng ta phải khởi tạo các biến hằng số nhưng trong C, nó có thể được biên dịch mà không cần khởi tạo.

Đối với C.

Ví dụ

#include<stdio.h>
int main() {
   const int x;
   printf("x: %d",x);
}

Đầu ra (C)

x: 0

Đầu ra (C ++)

[Error] uninitialized const 'x' [-fpermissive]

Trong C, chúng ta có thể sử dụng một số biến có tên là ‘new’. Nhưng trong C ++, chúng ta không thể sử dụng tên này làm tên biến vì trong C ++, ‘new’ là một từ khóa. Điều này được sử dụng để cấp phát không gian bộ nhớ.

Đối với C.

Ví dụ

#include<stdio.h>
int main() {
   int new = 10;
   printf("new: %d",new);
}

Đầu ra (C)

new: 10

Đầu ra (C ++)

[Error] expected unqualified-id before 'new'
[Error] expected type-specifier before ')' token

Chúng tôi không thể biên dịch mã sau trong C ++. Điều này sẽ trả về một lỗi khi chúng tôi đang cố gắng chuyển đổi int thành char *. Nhưng trong C, nó sẽ hoạt động tốt.

Đối với C.

Ví dụ

#include<stdio.h>
int main() {
   char *c = 123;
   printf("c = %u", c);
}

Đầu ra (C)

c = 123

Đầu ra (C ++)

[Error] invalid conversion from 'int' to 'char*' [-fpermissive]

Trong C, chúng ta có thể sử dụng void làm kiểu trả về của main (), nhưng trong C ++, chúng ta phải sử dụng int làm kiểu trả về của main ().

Đối với C.

Ví dụ

#include<stdio.h>
void main() {
   printf("Hello World");
}

Đầu ra (C)

Hello World

Đầu ra (C ++)

[Error] '::main' must return 'int'