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

内容摘自http://www.geeksforgeeks.org/write-c-program-wont-compiler-c/

 

1) In C++, it is a compiler error to call a function before it is declared. But in C, it may compile (Seehttp://www.geeksforgeeks.org/g-fact-95/)

 1 #include<stdio.h>
 2 int main()
 3 {
 4    foo(); // foo() is called before its declaration/definition
 5 } 
 6  
 7 int foo()
 8 {
 9    printf("Hello");
10    return 0; 
11 }

 

2) In C++, it is compiler error to make a normal pointer to point a const variable, but it is allowed in C. (See Const Qualifier in C)

#include <stdio.h>
 
int main(void)
{
    int const j = 20;
 
    /* The below assignment is invalid in C++, results in error
       In C, the compiler *may* throw a warning, but casting is
       implicitly allowed */
    int *ptr = &j;  // A normal pointer points to const
 
    printf("*ptr: %d\n", *ptr);
 
    return 0;
}

 

3) 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 typcasted.

#include <stdio.h>
int main()
{
   void *vptr;
   int *iptr = vptr; //In C++, it must be replaced with int *iptr=(int *)vptr; 
   return 0;
}

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 = (void *)malloc(sizeof(int))”. In C, typecasting is not necessary.

 

4) Following program compiles & runs fine in C, but fails in compilation in C++. const variable in C++ must be initialized but in c it isn’t necessary. Thanks to Pravasi Meet for suggesting this point.

#include <stdio.h>
int main()
{
    const int a;   // LINE 4
    return 0;
}
Line 4 [Error] uninitialized const 'a' [-fpermissive]

 

5) This is the worst answer among all, but still a valid answer. We can use one of the C++ specific keywords as variable names. The program won’t compile in C++, but would compiler in C.

#include <stdio.h>
int main(void)
{
    int new = 5;  // new is a keyword in C++, but not in C
    printf("%d", new);
}

Similarly, we can use other keywords like delete, explicit, class, .. etc.

 

6) 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*'”. Thanks to Pravasi Meet for adding this point.

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

 

posted @ 2015-09-22 15:58  lyleslie  阅读(125)  评论(0编辑  收藏  举报