Write a C program that won’t compile in C++

22 Nov, 2021
Although C++ is designed to have backward compatibility with C, there can be many C programs that would produce compiler errors when compiled with a C++ compiler. Following is the list of the C programs that won’t compile in C++:
Calling a function before the declarationUsing normal pointer with const variableUsing typecasted pointersDeclaring constant values without initializingUsing specific keywords as variable namesStrict type checkingThe return type of main()
Calling a function before the declaration
Using normal pointer with const variable
Using typecasted pointers
Declaring constant values without initializing
Using specific keywords as variable names
Strict type checking
The return type of main()
These points are discussed in detail below:
1) Calling a function before declaration: In C++, it is a compiler error to call a function before it is declared. But in C, it may compile. (See What happens when a function is called before its declaration in C?) 
C
// C Program to demonstrate calling// a function before declaration#include <stdio.h>  // Main startsint main(){    // fun() is called before its    // declaration/definition    fun();}  // Function Declarationint fun(){    printf("Hello");    return 0;}
2) Using a normal pointer with const variable: In C++, a compiler error is generated when a normal pointer is used to point to a const variable, however, it is allowed in C. (Must Read – Const Qualifier in C)  
C
// C Program to demonstrate using a// normal pointer with const variable#include <stdio.h>  // Main startsint main(){      // A normal pointer points to const    int const j = 20;      int* ptr = &j;      // The below assignment is invalid in C++,    // results in error.In C, the compiler may    // throw a warning, but casting is implicitly allowed    printf("*ptr: %d\n", *ptr);      return 0;}
3) Using typecasted pointers: In C, a void pointer can directly be assigned to some other pointer like int *, char *. But in C++, a void pointer must be explicitly typed cast. 
C
// C Program to demonstrate// using typecasted pointers#include <stdio.h>  // Main startsint main(){    void* vptr;      // In C++, it must be    // replaced with int *iptr=(int *)vptr;    int* iptr = vptr;      return 0;}
Note: This is something we notice when we use malloc(). Return type of malloc() is void *. In C++, we must explicitly typecast return value of malloc() to appropriate type, e.g., “int *p = (int *)malloc(sizeof(int))”. In C, typecasting is not necessary. 
4) Declaring constant values without initializing: In C++, the const variable must be initialized but in C it is not necessary. The following program compiles & runs fine in C, but fails in the compilation in C++. 
C
// C Program to demonstrate declaring// constant values without initializing:#include <stdio.h>  // Main startsint main(){    const int a;       return 0;}
5) Using specific keywords as variable names: In C, specific keywords can be used as variable names, however, it is not possible in C++. The following program won’t compile in C++ but would compile in C.  
C
// C Program to demonstrate using// specific keywords as variable names#include <stdio.h>  // Main startsint main(void){      // new is a keyword in C++    // but not in C    int new = 5;      printf("%d", new);}
Similarly, we can use other keywords like delete, explicit, class, etc.
6) Strict type checking: C++ does more strict type checking than C. For example, the following program compiles in C, but not in C++. In C++, we get compiler error “invalid conversion from ‘int’ to ‘char*'”.  
C
// C Program to demonstrate// strict type checking#include <stdio.h>  // Main startsint main(){    char *c = 333;    printf("c = %u", c);    return 0;}
7) Return type of main(): In C++, the main function requires the return type of ‘int’, however not the case in C. In C++, we cannot use the return type as ‘void’.
C
// C Program to demonstrate that// 'void' can be used as a return type// for main()#include <stdio.h>  // Main startsvoid main(){    printf("Hello World");}
8) The following program compiles in C but doesn’t compile in C++. (See this article for more reference.) 
C
// C Program that won't compile in C++#include <stdio.h>void func(){    // definition}  // Main startsint main(){    func();    func(2);}
Explanation: In C++, func() is equivalent to func(void), however in C, func() is equivalent to func(...).
This article is contributed by Abhay Rathi. Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above
Sreedhar25
makristiniy
23603vaibhav2021
anshikajain26
cpp-puzzle
C Language
C++
CPP
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.