ที่นี่ เราจะเขียนโปรแกรม C บางอย่างที่ คอมไพล์ไม่ได้ใน C++ แม้ C++ จะถูกพิจารณาว่าเป็นผู้สืบทอดของ C ที่มีฟีเจอร์ครบและมีความเข้ากันได้กับโค้ด C แต่มีบางโปรแกรมที่คอมไพล์ไม่ผ่านหรือให้ compilation error เมื่อคอมไพล์ด้วยคอมไพลอร์ C++
รายการโปรแกรม C บางอย่างที่คอมไพล์ไม่ได้ใน C++:
เรียกฟังก์ชันก่อนการประกาศ (Call to a function before declaration) - ใน C++ การเรียกฟังก์ชันก่อนประกาศจะให้ compilation error แต่ใน C ทำงานได้ปกติ
ตัวอย่าง
#include <stdio.h>
int main() {
printHello();
return 0;
}
void printHello() {
printf("TutorialsPoint");
}
ผลลัพธ์
TutorialsPoint
ใช้ Pointer ที่ typecast แล้ว (Using typecasted pointers) - ถ้าเราประกาศ pointer ใน C เป็น void แล้วใช้ pointer นี้ชี้ตัวแปรข้อมูลอื่น สามารถทำได้ใน C โดยคอมไพลอร์เอง แต่ใน C++ pointer เหล่านี้ต้อง typecast ให้ชัดเจน
ตัวอย่าง
#include <stdio.h>
int main() {
void* ptr;
int* ptr2 = ptr; // Error ใน C++
return 0;
}
ประกาศค่าคงที่ (constant) โดยไม่ initialize (Declaring constant values without initialising) - ใน C คุณสามารถประกาศค่าคงที่โดยไม่ให้ค่าใดๆ แต่มันจะคืน error ใน C++
ตัวอย่าง
#include <stdio.h>
int main() {
const int x;
printf("%d", x); // Error ใน C++
return 0;
}
ผลลัพธ์
0
ใช้ normal pointer กับตัวแปร const (Using normal pointer with const variable) - ใน C++ ไม่อนุญาต ในขณะที่ C อนุญาตให้ใช้ const variable กับ normal pointer
ตัวอย่าง
#include <stdio.h>
int main(void) {
int const x = 3424;
int* cptr = &x; // Error ใน C++
printf("value of pointer: %d\n", *cptr);
return 0;
}
ผลลัพธ์
Value of pointer: 3424
ใช้คีย์เวิร์ดเฉพาะเป็นชื่อตัวแปร (Using specific keywords as variable names) - ในภาษา C การใช้คีย์เวิร์ดบางตัวเป็นชื่อตัวแปรถูกต้อง คือ จะคอมไพล์ได้ใน C แต่ไม่ได้ใน C++
ตัวอย่าง
#include <stdio.h>
int main(void) {
int class = 5; // 'class' เป็น keyword ใน C++
printf("%d", class);
return 0;
}
ผลลัพธ์
5
นี่คือคีย์เวิร์ดที่รวมอยู่ใน C++ อื่นๆ อีกมี new, delete, explicit, ฯลฯ