c 初始化char**_编写一个不会在C++中编译的C程序

d1f8cc5d14a4651af7b626ed968da58b.png

尽管C++被设计为与C具有向后兼容性,但是当使用C++编译器进行编译时,可能会有许多C程序会产生编译器错误。以下是其中一些。

1)在C++中,在声明函数之前调用函数是编译器错误。但是在C语言中,它可以编译。

#include int main() {    foo(); // foo() is called before its declaration/definition }    int foo() {    printf("Hello");    return 0;  }

2)在C++中,使普通指针指向const变量是编译器错误,但在C中是允许的。

#include    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", *ptr);       return 0; } 

3)在C语言中,可以将void指针直接分配给其他一些指针,例如int *,char *。 但是在C++中,必须明确地声明void指针。

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

使用malloc()时,我们会注意到这一点。malloc()的返回类型为void *。在C++中,我们必须明确将malloc()的返回值类型转换为适当的类型,例如“ int * p =(int *)malloc(sizeof(int))”。在C语言中,不需要类型转换。

4)以下程序可以在C中编译并正常运行,但是在C++中编译失败。C++中的const变量必须初始化,但在c中则没有必要。

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

5)我们可以使用特定于C++的关键字之一作为变量名。该程序不会在C++中进行编译,但会在C中进行编译。

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

同样,我们可以使用其他关键字,例如delete,explicit,class等。

6)C++比C做更严格的类型检查。例如,以下程序在C中编译,但不在C++中编译。在C++中,我们收到编译器错误“invalid conversion from ‘int’ to ‘char*'”。

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

7)C++要求main 返回“ int”类型

#include  void main() {     printf("Hello World"); } 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值