Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在macOS上查找C头文件errno.h的位置?_C_Macos_Header Files_Macos Catalina_Errno - Fatal编程技术网

如何在macOS上查找C头文件errno.h的位置?

如何在macOS上查找C头文件errno.h的位置?,c,macos,header-files,macos-catalina,errno,C,Macos,Header Files,Macos Catalina,Errno,我是C语言新手,正在尝试查看头文件的源代码 我怎样才能: 找出头文件存储在我的计算机上的位置 是否查看头文件的源 我尝试过的 从,在我的$HOME目录中运行gcc--print file name=errno.h,只输出errno.h 从,运行cpp-dM/usr/include/errno.h | grep'define E E'| sort-n-k3输出: clang:error:没有这样的文件或目录:'/usr/include/errno.h' 叮当声:错误:没有输入文件 从,运行cla

我是C语言新手,正在尝试查看头文件的源代码

我怎样才能:

  • 找出头文件存储在我的计算机上的位置
  • 是否查看头文件的源
  • 我尝试过的

    从,在我的
    $HOME
    目录中运行
    gcc--print file name=errno.h
    ,只输出
    errno.h

    从,运行
    cpp-dM/usr/include/errno.h | grep'define E E'| sort-n-k3
    输出:

    clang:error:没有这样的文件或目录:'/usr/include/errno.h'
    叮当声:错误:没有输入文件
    
    从,运行
    clang-E/usr/include/errno.h
    输出:

    clang:error:没有这样的文件或目录:'/usr/include/errno.h'
    叮当声:错误:没有输入文件
    
    我知道的一个解决方案是运行
    sudofind/-name“errno*.h”-type f
    。但是,这将返回许多结果。我想知道是否有一些编程方法可以使用C相关工具(例如,通过调用
    gcc
    )查找源代码

    我的电脑

    • macOS版本:10.15.7(Catalina)
    • clang--version
      -->
      Apple clang版本12.0.0(clang-1200.0.32.27)

      • 现在还不完全清楚您想在这里做什么-因为
        是一个标准的库头,您可以在以下位置找到它:
        /usr/include/errno.h
        。。。编辑-我现在可以看到你与Catalina之间的问题。见下文:

        至少在我的(较旧的)OSX框中,这个标题不是很有用-依次包括
        ,它至少提供了符号常量:
        EPERM,enoint,
        (有关概述,请参阅:
        man intro

        由于
        本身包含更多的系统头,尽管这些头很少涉及用户空间开发,您可以通过预处理阶段了解编译器如何递归查找这些头:

        clang-E/usr/include/errno.h
        -这也适用于
        gcc


        对于Catalina,标题现在位于SDK下。我相信这是有原因的——多个SDK(例如iphone开发等),以及一些事后的安全理由阻止创建
        /usr/include
        目录。在任何情况下,对于Catalina,您都需要使用Xcode工具:
        xcrun
        (请参阅:
        manxcrun
        )来查找SDK路径:
        ../usr/include

        `xcrun --show-sdk-path`/usr/include
        
        提供路径,以便查看

        less `xcrun --show-sdk-path`/usr/include/errno.h
        
        因此,您可以通过以下方式运行预处理器:

        clang -E `xcrun --show-sdk-path`/usr/include/errno.h
        

        这是很麻烦的,而且很多有自己构建系统的包都不会意识到这一需求。因此,有用的选项是在
        ~/.bashrc
        -shell init文件在OSX上乱七八糟

        export CPATH=`xcrun --show-sdk-path`/usr/include/
        
        或者shell喜欢的任何语法。我推荐上面的方法,因为
        'sh'
        (通常
        'bash'
        )是基本的,其他shell继承变量。(尽管从Catalina开始,您可能应该关注
        zsh
        init文件,因为它正在取代
        bash
        。)

        $CPATH
        将受到clang和gcc的尊重-我不确定它在技术上是否是POSIX/BSD/ISO C标准(可能超出后者的范围);但实际上,它在各个平台上无处不在

        因此,现在您可以只使用:
        减去$CPATH/errno.h
        ,或者将预处理器用作:

        clang -E $CPATH/errno.h
        

        头文件通常存储在/usr/include中。请注意,这不是一个库,而是一个包含文件。我不知道区别,谢谢@Rob。我已经用一个真正的编译器更新了这个问题,你可以使用
        -H
        option@BasileStarynkevitch-嗯。每天学习新的东西!感谢@BrettHale的响应,运行
        clang
        命令返回
        错误:没有这样的文件或目录:'/usr/include/errno.h'
        。有什么想法吗?@IntrastellarExplorer-对不起,卡塔琳娜的情况发生了变化,我已经更新了答案。你的答案很准确,谢谢@BrettHale的更新!:)。我现在能够弄清楚
        errno
        是如何实现的。