同一段代码,扩展名为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)
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 使用自动布局动态扩展为滚动视图内的文本
可变参数宏包装器,扩展为使用与参数数量相对应的字符格式化字符串