我在做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/