首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >初始化使指针从整数开始,编译时不进行强制转换

初始化使指针从整数开始,编译时不进行强制转换
EN

Stack Overflow用户
提问于 2021-01-19 19:56:34
回答 1查看 55关注 0票数 0

在编译以下代码时,我收到了来自gcc编译器的werid警告:

代码语言:javascript
复制
  int main( int argc, char *argv[] )
{
    int fdm;
    pid_t pid;
    fdm = posix_openpt( O_RDWR );
    pid = fork();
    if(pid==0)
    {
        if(grantpt(fdm) ==-1)
        {
            perror("grantpt");
            exit(EXIT_FAILURE);
        }
        if(unlockpt(fdm) ==-1)
        {
            perror("unlockpt");
            exit(EXIT_FAILURE);
        }
        char* name = ptsname(fdm);
        int fds = open(name,O_RDWR);
        if(fds ==-1)
        {
            perror("open");
            exit(EXIT_FAILURE);
        }
        close(0);
        close(1);
        close(2);
        dup(fds);
        dup(fds);
        dup(fds);
        execlp("cat","cat",NULL);
        perror("cat");
        exit(EXIT_FAILURE);
    }
    printf( "main: copied %d bytes\n", dblCOPY( STDIN_FILENO, fdm, fdm, STDOUT_FILENO ) );
 return 0;
}

下面是警告:

代码语言:javascript
复制
warning: initialization makes pointer from integer without a cast [enabled by default]
   char* name = ptsname(fdm);

werid的问题是ptsname函数返回的是char指针,而不是编译器声称的整型,那么问题出在哪里呢?

EN

回答 1

Stack Overflow用户

发布于 2021-01-19 20:23:51

在包含头文件之前,您可能需要定义一些功能测试宏。

请参见手册页man feature_test_macros

有两种方法可以删除此警告,

  1. 通过添加上面的代码来定义所需的功能测试宏

#定义_XOPEN_SOURCE

#定义_XOPEN_SOURCE_EXTENDED

#包含

#包含

#包含

#包含

  1. 或自己声明函数

#包含

#包含

#包含

#包含

char *ptsname(int fd);

int posix_openpt(int标志);

int grantpt(int fd);

int unlockpt(int fd);

我希望这能解决这个问题

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65791051

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档