同一段代码,扩展名为cpp就可以成功编译,扩展为c就不能编译,求解答

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了同一段代码,扩展名为cpp就可以成功编译,扩展为c就不能编译,求解答相关的知识,希望对你有一定的参考价值。

#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>

typedef struct

int *elem;
int length;

sqlist;

int init_list(sqlist &L) //初始化线性表

L.elem = (int*)malloc(5*sizeof(int));
if(L.elem == 0)
return 0;
else
return 1;
L.length=1;
return 0;

void main()

sqlist L;
init_list(L);

代码如下
以cpp扩展名,可以成功编译,以c为扩展名时,提示
error C2143: syntax error : missing ')' before '&'
error C2143: syntax error : missing '' before '&'
error C2059: syntax error : '&'
error C2059: syntax error : ')'
: warning C4013: 'init_list' undefined; assuming extern returning int
执行 cl.exe 时出错.

new 1.obj - 1 error(s), 0 warning(s)

使用c做后缀名时,使用c语言编译器。
int init_list(sqlist &L)
这个函数的形参是引用,引用是C++引入的概念,C语言不支持
C会认为这里是一个取址操作符。所以报错
参考技术A 编译器会通过文件扩展名来决定用哪种语言编译。cpp是C++语言,而c是C语言。C++语言是不能用C编译的。反过来C一般可以用C++编译,但也有例外。
阿。看了你的程序,这个比较奇怪,我想想。
哦,C语言不支持传参。只有C++才支持。

“C does not directly support pass by reference because it always uses pass by value, but a programmer can implement pass by reference by passing a pointer to the variable that the programmer wants passed by reference.”
参考技术B int_list的参数不能是&吧,这个代表引用,表示地址应当用指针 sqlist*

以上是关于同一段代码,扩展名为cpp就可以成功编译,扩展为c就不能编译,求解答的主要内容,如果未能解决你的问题,请参考以下文章

UITextView 使用自动布局动态扩展为滚动视图内的文本

C++ 代码使用 .cpp 源而不是 .c 编译

Rust的宏可以像C预处理器宏一样扩展为十六进制数吗?

可变参数宏包装器,扩展为使用与参数数量相对应的字符格式化字符串

我可以将 Enum 扩展为 Enum.GetValues() 吗? [复制]

将矩阵扩展为块矩阵 - 索引问题