📜  C和C++代码之间的不兼容性

📅  最后修改于: 2021-05-30 13:22:17             🧑  作者: Mango

引起大多数实际问题的C / C++不兼容并不是很细微的。大多数都容易被编译器捕获。
本节提供了非C++的C代码示例:

1)在C语言中,可以使用一种语法来定义函数,该语法可以在参数列表之后选择性地指定参数类型:

// C code that uses argument types after
// the list of arguments.
#include
void fun(a, b)int a;int b;     // Invalid in C++
{
    printf("%d %d", a, b);
}
  
// Driver code
int main()
{
    fun(8, 9);
    return 0;
}
Output:
8 9 
Error in C++ :-  a and b was not declared in this scope 

2)在C和C++的预标准版本中,类型说明符默认为int。

// C code to show implicit int declaration.
#include
int main()
{
    // implicit int in C, not allowed in C++
    const a = 7;    
      
    printf("%d", a);
    return 0;
}
Output:
7
Error in C++ :-  a does not name a type 

3)在C语言中,可以不使用extern说明符多次声明一个全局数据对象。只要这样的声明最多提供一个初始化程序,就认为该对象仅定义一次。

// C code to demonstrate multiple global
// declarations of same variable.
#include
  
// Declares single integer a, not allowed in C++
int a;   int a;  
int main()
{
    return 0;
}
Error in C++ :-  Redefinition of int a

4)在C中,可以将void *用作任何指针类型的变量的赋值或初始化的右侧操作数。

// C code to demonstrate implicit conversion
// of void* to int*
#include
#include
void f(int n)
{
    // Implicit conversion of void* to int*
    // Not allowed in C++.
    int* p = malloc(n* sizeof(int));  
}
  
// Driver code
int main()
{
    f(7);
    return 0;
}
Error in C++ :-  Invalid conversion of void* to int*

5)在C语言中,可以通过一个初始化器初始化一个数组,该初始化器具有比该数组所需的元素更多的元素。

// C code to demonstrate that extra character
// check is not done in C.
#include
int main()
{
    // Error in C++
    char array[5] = "Geeks";      
  
    printf("%s", array);
    return 0;
}

输出:

Geeks
Error in C++ :-  Initializer-string for array of chars is too long

6)在C语言中,声明的函数如果不指定任何参数类型,则可以使用任意数量的任何类型的参数。单击此处了解更多信息。

// In C, empty brackets mean any number
// of arguments can be passed
#include
  
void fun() {  } 
int main(void)
{
    fun(10, "GfG", "GQ");  
    return 0;
}
Error in C++ :-  Too many arguments to function 'void fun()'

相关文章:

  • 在C / C++中编写“ void main()”或“ main()”是否可以?
  • C / C++中的“ int main()”和“ int main(void)”之间的区别?
  • C++程序的输出|设置24(C++ vs C)
想要从精选的最佳视频中学习和练习问题,请查看《基础知识到高级C的C基础课程》。