0

这是我的程序:

int main()
{
printf("%d : %s\n", errno, (errno==0)?"no error":strerror(errno));
}

它在编译时给出这个警告:

warning: pointer/integer type mismatch in conditional expression [enabled by default]

由于errnois 的类型int和表达式“无错误”并且strerror()都返回指向字符串的指针,为什么我会收到错误消息?

4

1 回答 1

2

我怀疑它#include <string.h>不包括在内,这意味着strerror()为它生成了一个隐式函数声明,它返回一个int.

此代码(http://ideone.com/6BckJx):

#include <stdio.h>
#include <errno.h>

int main()
{
    printf("%d : %s\n", errno, (errno==0)?"no error":strerror(errno));
    return 0;
}

产生:

prog.c:在函数'main'中:
prog.c:6:5:错误:函数“strerror”的隐式声明
    [-Werror=隐式函数声明]
prog.c:6:53:错误:条件表达式中的指针/整数类型不匹配
    [-错误]
cc1:所有警告都被视为错误

添加#include <string.h>更正问题(http://ideone.com/Ihycd0)。

于 2013-05-03T13:35:00.890 回答