即使此文件保存为
gcc
,下面的代码行也会在 check.c
编译器中出现错误。错误位于 void swap_address(int& a, int& b)
as 行
错误:“&”标记之前应有“;”、“,”或“)”
我使用了这个命令来编译C文件:
gcc -o check check.c
但是如果我使用
g++
编译器,相同的代码可以正常工作:g++ -o check check.c
请告诉我为什么它适用于
g++
而不是适用于 gcc
。
代码:
#include <stdio.h>
void swap_value(int a, int b)
{
a=a+b;
b=a-b;
a=a-b;
}
void swap_address(int& a, int& b)
{
a=a+b;
b=a-b;
a=a-b;
}
int main()
{
int i=5,j=3;
swap_value(i,j);
printf("%d%d\n", i, j);
swap_address(i,j);
printf("%d%d\n", i, j);
return 0;
}
swap_address()
具有引用参数,该文件具有“.c”扩展名,因此 gcc
假设它是 C 文件并产生错误,因为引用参数不是 C 的一部分。
g++
将文件视为 C++,因此对参考参数感到满意。
引用是 C++ 功能,C 不支持它们。
C 和 C++ 是不同的编程语言。
您使用
.c
扩展名保存文件,这使得 gcc
可执行以将其视为 C 语言文件。同时,您尝试在代码中使用 C++ 功能(例如引用)。难怪它无法通过 gcc
进行编译。
g++
可执行文件无条件地将所有文件视为 C++ 文件,无论扩展名如何,这就是它使用 g++
进行编译的原因。