【问题标题】:Why am I getting an error with gcc but not with g++ in Linux为什么我在使用 gcc 时出现错误,但在 Linux 中使用 g++ 时却没有
【发布时间】:2013-08-23 04:52:00
【问题描述】:

即使此文件保存为check.c,下面的代码行也会导致gcc 编译器出错。错误在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;
}

【问题讨论】:

  • int &amp; 是来自 C++ 领域的东西。 C 编译器不处理这种语法。

标签: gcc compiler-construction compiler-errors


【解决方案1】:

swap_address() 具有引用参数,该文件具有“.c”扩展名,因此 gcc 假定它是 C 文件并产生错误,因为引用参数不是 C 的一部分。

g++ 将文件视为 C++,因此它对引用参数感到满意。

【讨论】:

    【解决方案2】:

    引用是 C++ 的一项功能,在 C 中不受支持。

    【讨论】:

      【解决方案3】:

      C 和 C++ 是不同的编程语言。

      您使用.c 扩展名保存了文件,这使得gcc 可执行以将其视为C 语言文件。同时,您尝试在代码中使用 C++ 功能(例如引用)。难怪它不能用gcc 编译。

      g++ 可执行文件无条件地将所有文件视为 C++ 文件,无论扩展名如何,这就是它使用 g++ 编译的原因。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-14
        • 2021-07-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多