c 中导入的头文件使用了哪些函数?

2024-03-28

我正在阅读这个用 C 编写的庞大代码库。在某些文件中包含一些标头,但未指定其需要。我想知道是否有任何方法可以查看当前文件中的特定标头使用了哪些函数,而无需阅读两个文件中的整个代码。


最简单的方法是检查预处理文件。编译器的预处理器将生成声明或定义来自哪个文件的信息。

使用 GCC 或 Clang,带有类似标志-E生成预处理代码。

Example

以helloworld的修改版为例。代码已修改以包含更多头文件。

#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>

int main() {
        char * str = (char*) malloc(sizeof(char)*10);
        int16_t a = 10;
        str[0]='h';str[1]='e';str[2]='l';str[3]='l';str[4]='o';str[5]='\0';
        printf("%s %d\n", str, a);
        free(str);
        return 0;
}

在我的 Ubuntu 15.04 中,使用gcc -E hello_mod.c -o hello_mod.i。预处理后的文件如下,无关代码已被删除。

<......UNRELATED CODE REMOVED.......>

# 36 "/usr/include/stdint.h" 3 4
typedef signed char int8_t;
typedef short int int16_t;
<......UNRELATED CODE REMOVED.......>


# 319 "/usr/include/stdio.h" 3 4
<......UNRELATED CODE REMOVED.......>

extern int printf (const char *__restrict __format, ...);

<......UNRELATED CODE REMOVED.......>


# 315 "/usr/include/stdlib.h" 2 3 4

<......UNRELATED CODE REMOVED.......>

extern void *malloc (size_t __size) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__malloc__)) ;

<......UNRELATED CODE REMOVED.......>

extern void free (void *__ptr) __attribute__ ((__nothrow__ , __leaf__));


<......UNRELATED CODE REMOVED.......>
# 1 "/usr/include/x86_64-linux-gnu/bits/stdlib-float.h" 1 3 4
# 955 "/usr/include/stdlib.h" 2 3 4
# 967 "/usr/include/stdlib.h" 3 4

# 4 "hello_mod.c" 2

int main() {
        char * str = (char*) malloc(sizeof(char)*10);
        int16_t a = 10;
        str[0]='h';str[1]='e';str[2]='l';str[3]='l';str[4]='o';str[5]='\0';
        printf("%s %d\n", str, a);
        free(str);
        return 0;
}

通常,原始代码位于预处理器生成的文件的末尾。然后你可以向后搜索你感兴趣的功能。一旦你找到它。然后第一个文件路径以# 当您向后滚动时,该文件是函数声明的头文件。

根据上面的代码,我们可以发现:

  • int16_t is typedef编辑到文件中/usr/include/stdint.h.
  • printf函数声明于/usr/include/stdio.h.
  • malloc and free函数声明于/usr/include/stdlib.h

编译器也使用这种方式生成调试信息,帮助您找到gdb中的文件路径和行号。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c 中导入的头文件使用了哪些函数? 的相关文章

  • 为什么 VB.NET 和 C# 中针对值检查 null 存在差异?

    In VB NET http en wikipedia org wiki Visual Basic NET有时候是这样的 Dim x As System Nullable Of Decimal Nothing Dim y As System
  • 在Application_AquireRequestState事件中用POST数据重写Url

    我有一个在其中注册路线的代码Application AcquireRequestState应用程序的事件 注册路由后 我会在 Http 运行时缓存中设置一个标志 这样我就不会再次执行路由注册代码 在此事件中注册路线有特定原因Applicat
  • 用户控件内所有控件均为空

    我有一个 UserControl 它使用 UserControl 以及其他控件 In the ascx文件我有以下代码
  • 静态类变量与外部变量相同,只是具有类作用域吗?

    在我看来 静态类变量与外部变量相同 因为你只需要declare它在static int x extern int x语句 并在其他地方实际定义它 通常在 cpp 文件中 静态类变量 h file class Foo static int x
  • 矩阵向量变换

    我正在编写一个代码来制作软件蒙皮器 骨骼 皮肤动画 并且我正处于 优化 阶段 蒙皮器工作得很好 并且在 Core 上 1 09 毫秒内对 4900 个三角形网格与 22 个骨骼进行蒙皮Duo 2 Ghz 笔记本 我需要知道的是 1 有人可以
  • 有没有办法使用 i387 fsqrt 指令获得正确的舍入?

    有没有办法使用 i387 fsqrt 指令获得正确的舍入 除了改变精确模式在 x87 控制字中 我知道这是可能的 但这不是一个合理的解决方案 因为它存在令人讨厌的重入型问题 如果 sqrt 操作中断 精度模式将出错 我正在处理的问题如下 x
  • 存储过程上的 OdbcCommand - 输出参数上出现“未提供参数”错误

    我正在尝试执行存储过程 通过 ODBC 驱动程序针对 SQL Server 2005 但收到以下错误 过程或函数 GetNodeID 需要参数 ID 但未提供该参数 ID 是我的过程的 OUTPUT 参数 在存储过程中指定了一个输入 mac
  • 在 MATLAB 中创建共享库

    一位研究人员在 MATLAB 中创建了一个小型仿真 我们希望其他人也能使用它 我的计划是进行模拟 清理一些东西并将其变成一组函数 然后我打算将其编译成C库并使用SWIG https en wikipedia org wiki SWIG创建一
  • 我可以仅在少数情况下关闭模拟吗

    我有一个始终使用模拟的应用程序 但是 当用户以管理员身份登录时 一些操作需要他们写入服务器本身 现在 如果这些用户在实际服务器上没有权限 有些用户没有 则不会让他们写入 我想做的是关闭几个命令的模拟 有没有办法做这样的事情 using Ho
  • 手动将 ClientBase 集合类型从 Array[] 更改为 List<>

    我将自己的 WCF 代理与 Client Base 一起使用 我想做一些类似于 svc util 中的 ct 属性的操作 并告诉代理返回 List 集合类型 我不能使用 List 因为实体由 nhibernate 管理 所以我必须使用 IL
  • 格式化货币

    在下面的示例中 逗号是小数点分隔符 我有这个 125456 89 我想要这个 125 456 89 其他示例 23456789 89 gt 23 456 789 89 Thanks 看看这个例子 double value 12345 678
  • 以编程方式更新 ClickOnce 应用程序的部署清单会导致缺少 4.0 中所需的 <兼容框架> 元素

    我正在致力于自动化 NET 4 0 ClickOnce WPF 应用程序的安装程序 该应用程序需要在应用程序配置文件 我经历了寻找必须遵循的具体步骤的棘手过程Mage exe http msdn microsoft com en us li
  • C#中Enum中定义的value__是什么

    What value 可能在这里 value MSN ICQ YahooChat GoogleTalk 我运行的代码很简单 namespace EnumReflection enum Messengers MSN ICQ YahooChat
  • 将非算术类型作为参数传递给 cmath 函数是否有效?

    给定以下用户定义类型S具有转换功能double struct S operator double return 1 0 以及以下调用cmath http en cppreference com w cpp header cmath使用类型的
  • 不兼容的类型 - 是因为数组已经是指针吗?

    在下面的代码中 我创建一个基于书籍结构的对象 并让它保存多个 书籍 我设置的是一个数组 即定义 启动的对象 然而 每当我去测试我对指针的了解 实践有帮助 并尝试创建一个指向创建的对象的指针时 它都会给我错误 C Users Justin D
  • .NET JIT 编译的代码缓存在哪里?

    NET 程序首先被编译为 MSIL 代码 当它被执行时 JIT编译器会将其编译为本机机器代码 我想知道 这些JIT编译的机器代码存储在哪里 它只存储在进程的地址空间中吗 但由于程序的第二次启动比第一次快得多 我认为即使在执行完成后 该本机代
  • 使用 foreach 循环和 XmlNodeList C# 将新节点附加到节点列表

    目前我处理的是这样的XML类型 XML FILE http 20drive google com open id 0By5BxgNi9eGcRldxcEZNU0FDTzQ 参考XML文件 我想检查一个节点 如果找不到该节点 我必须将该节点附
  • C++ [Windows] 可执行文件所在文件夹的路径[重复]

    这个问题在这里已经有答案了 我需要访问一些文件fstream在我的 Windows 上的 C 应用程序中 这些文件都位于我的exe文件所在文件夹的子文件夹中 获取当前可执行文件的文件夹路径的最简单且更重要的 最安全的方法是什么 Use 获取
  • 如何设置 CMake 与 clang 交叉编译 Windows 上的 ARM 嵌入式系统?

    我正在尝试生成 Ninja makefile 以使用 Clang 为 ARM Cortex A5 CPU 交叉编译 C 项目 我为 CMake 创建了一个工具链文件 但似乎存在错误或缺少一些我无法找到的东西 当使用下面的工具链文件调用 CM
  • c# 模拟 IFormFile CopyToAsync() 方法

    我正在对一个异步函数进行单元测试 该函数将 IFormFile 列表转换为我自己的任意数据库文件类列表 将文件数据转换为字节数组的方法是 internal async Task

随机推荐

  • 有没有更好的写法 ||在单个 if 语句中[重复]

    这个问题在这里已经有答案了 想知道是否有更好的方法来编写下面的代码 我希望我的 if 语句忽略所有键码 但这样写似乎很混乱 如下所示 thanks if event keyCode 9 event keyCode 91 event keyC
  • 为什么 ((object)(int)1).Equals(((object)(ushort)1)) 产生 false?

    我有这样的情况object我想检查与另一个是否相等object public static bool Equals object a object b return a Equals b 当出现问题时a 1 integer and b 1
  • 为什么 Java 中的每个对象都隐式扩展 java.lang.Object 类?

    我已经用 Java 编程有一段时间了 但是当我试图解释什么是 Java 时 java lang Object是给朋友上课的 我除了简单的一句台词之外想不出更多的话 Java中的所有对象都扩展java lang Object隐含地 我不太确定
  • 以编程方式创建具有特定样式的 ImageView

    我想以编程方式执行此操作
  • IOS 5:UIScrollView 不将触摸传递给 nextResponder

    我有一个子类UIScrollView 并覆盖其所有 4 Touches 功能 在那些 Touches 函数中 self nextResponder Touches and super Touches 用于传递触摸事件 我还有一个视图控制器
  • Apache POI 设置 Excel 图表标题

    我正在从头开始创建 Excel 工作簿 其中一张工作表包含一个图表 我想设置图表标题 Apache POI 在 HSSFChart 上有一个 setChartTitle 方法 但 XSSFChart 和与格式无关的 Chart 都没有设置图
  • 如何验证 WebClient 请求?

    我正在使用网络客户端调用我网站上的页面 我正在尝试将网页的结果放入 pdf 中 因此我正在尝试获取呈现页面的字符串表示形式 问题是请求没有经过身份验证 所以我得到的只是一个登录屏幕 我已将 UseDefaultCredentials 属性设
  • 如何向 django 项目添加环境变量

    我正在尝试设置我的项目 以便它可以在本地使用环境变量 我尝试将其添加到我的激活文件和其他内容列表的末尾 我正在尝试使用这个 from base import if os environ DJANGO SERVER TYPE local tr
  • 在事务内部或外部打开和关闭游标以及事务失败时如何关闭游标

    我正在 SQL Server 2012 中编写一个存储过程 它使用游标进行读取 并在TRY CATCH堵塞 基本上 我的问题如下 我应该在里面声明我的光标吗TRY CATCH堵塞 如果是 我应该在之前还是之后声明光标BEGIN TRANSA
  • 将 Font Awesome 图标做成一个圆圈?

    我在某些项目中使用 font Awesome 但我想用 font Awesome 图标做一些事情 我可以轻松地调用这样的图标 i class fa fa lock i 是否有可能所有图标始终处于带边框的圆圈中 类似这样的 我有一张图片 Us
  • 使用一组迭代步骤迭代基于列表的列表

    我想根据存储在另一个列表中的可变数量的迭代和存储为整数的恒定数量的跳过来迭代给定的列表 假设我有三件事 l 我需要迭代 或过滤 的列表 w 一个列表 告诉我在休息之前要迭代多少项 k 一个整数 告诉我在每组迭代之间要跳过多少个元素 换句话说
  • Android 上原生的自修改代码

    我正在尝试在 Android 上制作一些自修改本机代码并在模拟器中运行它 我的示例基于 android ndk 中的 Hello JNI 示例 它看起来像这样 define NOPE LENGTH 4 typedef void FUNC v
  • 如何处理返回结构的不可变性?

    我正在编写一个具有巨大的二维 单元 数组的游戏 一个单元仅占用 3 个字节 我还有一个名为 CellMap 的类 其中包含作为私有字段的 2D 数组 并提供通过公共索引器对其进行访问 分析表明 性能问题是由过多 Cell 对象的垃圾回收引起
  • apache 和 httpd 正在运行,但我看不到我的网站 [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我已经在我的服务器上安装了 apache 但是我无法通过我的服务器 IP 浏览我的网站 apache 的设置是 var www htdocs 下的单帐
  • TeamFoundation.VersionControl.HatPackage 加载失败

    在源代码管理下加载项目时 我在 VS2013 中收到此错误 包 Microsoft VisualStudio TeamFoundation VersionControl HatPackage Microsoft VisualStudio T
  • 使用 itextsharp 将 HTML 转换为 PDF

    当使用将 html 转换为 pdf 时itextsharp使用 css 为网页应用的 iam 样式在转换后的 pdf 中不起作用 这是我的CSS代码
  • GraphQL 如何执行 JOIN 请求而不是许多顺序请求?

    我有两种 GraphQL 类型 type Author id String name String type Book id String author Author name String 在我的数据库中 它是通过 books 表内的外键
  • java 中覆盖 static 的替代方案

    我想知道 将属性适合作为大型继承结构一部分的类的最佳方法是什么 我想创建一个抽象静态方法 每个类都会覆盖该方法 但经过快速谷歌搜索后似乎不起作用 有什么建议么 我可以将其设为实例方法 但它实际上是类级别规范 提前致谢 我建议你创建一个抽象方
  • 打乱字符串,使相邻的两个字母都不相同

    我一直在尝试解决这个面试问题 该问题要求对字符串进行洗牌 以便没有两个相邻的字母是相同的 例如 ABCC gt ACBC 我想到的方法是 1 迭代输入字符串并存储 字母 频率 配对some收藏 2 现在通过拉出我们刚才没有拉出的最高频率 即
  • c 中导入的头文件使用了哪些函数?

    我正在阅读这个用 C 编写的庞大代码库 在某些文件中包含一些标头 但未指定其需要 我想知道是否有任何方法可以查看当前文件中的特定标头使用了哪些函数 而无需阅读两个文件中的整个代码 最简单的方法是检查预处理文件 编译器的预处理器将生成声明或定