C - 对于非指针函数的参数中的 const 用户有何优势?

标签 c constants

我想知道在调用像这样的函数时对用户是否有任何好处

A) void func(int i);

或者类似的函数

B) void func(const int i);

因为在 func 内部,参数 i 无论如何都会被复制到堆栈(或编译器在其优化中选择的任何地方),对于调用此函数的用户来说,A 和 B 之间没有区别。

所以如果一个工具是这样的:

A)

void func(int i)
{
    i = another_func(i);
    printf("%d", i);
}

或者使用const

B)

void func(const int i)
{
    int j = another_func(i);
    printf("%d", j);
}

我的问题:

实现 B 有什么优势?编译器可以执行任何类型的优化 ? A 和 B 只是一个简单的例子,这些问题对其他情况也有效。

我明白在指针中使用 const 的好处(例如 const void *data),因为我们告诉用户我们不会修改它的内容,但我不明白 const 的用法,除了警告程序员他不应该修改它的功能,但在我看来,在 API 头文件中使用 const 是没有用的。

感谢您的帮助。

最佳答案

这里有些人说,如果您不更改变量,则应该编写 const - 因为您可以声明任何局部变量 const。 (主要目的是防止你不小心改变变量,也可能帮助编译器优化你的代码)

其他人说你不应该声明函数参数 const,因为它会暴露 API 中的一些实现。

我觉得他们都对!这就是为什么您可以在函数声明中省略 const 的原因:您可以在 header 中编写 void func(int);,但要实现它 void func(const int i) {} 在代码文件中。

关于C - 对于非指针函数的参数中的 const 用户有何优势?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17133103/

相关文章:

c - 从 C 中的文件读取二维字符串数组

c - static const 和 const 有什么区别?

php - 解析错误:语法错误,意外的 ')',期待::(T_PAAMAYIM_NEKUDOTAYIM)

常量和指向指针的指针

c - Makefile,更好理解规则

C新手malloc问题

c - 在 AVX2 vector 中加载 16 位整数?

c - sprintf的简单使用-C

c++ - 为什么 "TYPE* const"指针有不同的行为?

javascript - 常量的Polyfill(有点)?