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

nar*_*aj9 -2 c unix linux libc

我在Stevens在 Unix 环境中的高级编程中做练习时遇到了这个问题:

  • to 的参数perror是用 ISO C 属性定义的const,而整数参数 tostrerror不是用这个属性定义的。为什么?

perrorconst属性定义的函数是因为我们通常向它传递一个文字字符串吗?

void perror(const char *s);

char *strerror(int errnum);
Run Code Online (Sandbox Code Playgroud)

Ola*_*che 5

声明函数的参数时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