c - 为什么 perror 的参数是用 ISO C 属性 const 定义的?

标签 c linux unix libc

我在做Advanced Programming in the Unix Environment中的练习时遇到了这个问题。作者:史蒂文斯:

  • perror 的参数是使用 ISO C 属性 const 定义的,而 strerror 的整数参数不是使用此属性定义的。为什么?

perror 函数是否使用 const 属性定义,因为我们通常向它传递一个文字字符串?

void perror(const char *s);

char *strerror(int errnum);

最佳答案

当声明函数的参数时const ,这意味着该函数不会修改传递的参数。

通常,当修改影响函数外部的值时,例如,参数被声明为 const当传递一个指向某物的指针时。

  • strerror(int errnum)即使函数修改了传递的整数,它也不会修改函数外部的值,因为它是按值传递的。因此,您不需要strerror(const int errnum) .
  • perror(const char *s)

    • 如果 perror修改s ,它不会修改函数外部的指针。因此,您不需要perror(char *const s) (常量指针)

    • 如果 perror将修改 *s ,它将修改字符串 s 的内容指着。因此,您需要perror(const char *s) (指向常量值的指针)以确保您的字符串不会被 perror 修改

关于c - 为什么 perror 的参数是用 ISO C 属性 const 定义的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23713257/

相关文章:

linux - 不小心删除了tomcat `webapps`文件夹

c - 标签只能作为语句的一部分使用 Error

c - 简单代码 : "declared argument argc is missing" 上的 A/UX cc 编译器错误

android - React Native 找不到 Android Studio 或 SDK

c - 包含 unistd.h 的 write() 的包装例程导致错误

linux - UNIX 命令中的隐式系统调用

c++ - printf有什么替代品吗?

一个目标文件中的代码对齐会影响另一个目标文件中函数的性能

c - Strncmp - 错误的逻辑

c - 如何向结构添加多个值