📜  C C++中的参数和参数之间的差异以及示例(1)

📅  最后修改于: 2023-12-03 15:13:44.647000             🧑  作者: Mango

C / C++ 中的参数和参数之间的差异

在 C 和 C++ 中,参数和参数之间的差异在概念上并不大。然而,它们的语法和实现方式略有不同。以下是两种语言之间的比较。

参数

C 和 C++ 函数都采用相同的语法来定义参数。在函数声明或定义中,函数名称后跟一对圆括号,其中参数列表在内部。例如,下面是一个包含两个参数的函数 add 的定义。

int add(int a, int b) {
    return a + b;
}

在参数列表中,每个参数都是由逗号分隔的类型和名称组成的。

在函数调用中,实参被传递给被调用函数。在 C 中,传递实参的方式是调用函数时将它们复制到函数的形参位置。在 C++ 中,也是类似的方式。但是,在 C++ 中,如果形参使用引用而不是值,则将实参的引用传递给函数。这意味着函数可以直接修改实参的值,而无需创建副本。例如:

void increment(int &x) {
    x++;
}

int main() {
    int a = 5;
    increment(a);
    cout << a; // 打印 6
    return 0;
}
参数之间的差异

C 和 C++ 在参数之间的语法上有所不同。C 中的函数声明和定义允许在函数名后放置空的括号,以表示不接受任何参数。例如:

int foo(); // 函数 foo 不接受任何参数

然而,在 C++ 中,一个空的括号表示的是一个不确定数量的参数。因此,一个不接受任何参数的函数必须明确地使用 void 来表示。

int foo(void); // 函数 foo 不接受任何参数,使用 void 表示

此外,在 C 中,未声明的函数接受任何数量和任何类型的参数。这意味着,在 C 中,代码可以编译通过,但在运行时可能产生未定义的行为,因为函数会接受错误类型或数量的实参。在 C++ 中,未声明的函数被视为不接受任何参数。

示例

以下是一个示例程序,在 C 和 C++ 中演示了函数参数和参数之间的差异。

#include <stdio.h>

/// C 中的函数声明
int add_c(int, int);
int hello_c();

/// C++ 中的函数声明
int add_cpp(int a, int b);
int hello_cpp(void);

int main() {
    // 调用函数 add_c
    printf("[C] The sum of 2 and 3 is %d\n", add_c(2, 3));
    // 调用函数 hello_c
    hello_c();

    // 调用函数 add_cpp
    printf("[C++] The sum of 5 and 7 is %d\n", add_cpp(5, 7));
    // 调用函数 hello_cpp
    hello_cpp();
}

// C 中的函数定义
int add_c(int a, int b) {
    return a + b;
}

int hello_c() {
    printf("[C] Hello, world!\n");
    return 0;
}

// C++ 中的函数定义
int add_cpp(int a, int b) {
    return a + b;
}

int hello_cpp(void) {
    printf("[C++] Hello, world!\n");
    return 0;
}

输出:

[C] The sum of 2 and 3 is 5
[C] Hello, world!
[C++] The sum of 5 and 7 is 12
[C++] Hello, world!