是否有一个 gcc 编译器选项可以帮助捕获形式和实际参数类型不匹配?

Youjun Hu
//file1.c
#include <stdio.h>
void p(int a)
{
  printf("%d\n",a);
}

//file2.c
 extern void p(float x); // external declaration doesn't match definition
int main(){
  float b;
  b=3.333f;
  p(b);
}

这里的外部声明是错误的,它与实际的函数定义不同。我编译并链接这两个文件:

gcc -Wconversion -Wall -std=c99 file1.c file2.c

没有发出警告。是否有任何 gcc 编译器选项可以帮助在编译/链接期间捕获这种不匹配?

埃里克·波斯皮希尔

编译器在编译 file2.c 时不可能观察到其中的声明与 file1.c 中的声明不匹配,因为在编译 file2.c 时,编译器不知道 file1 的内容。 C。

一些链接器具有可以帮助解决此问题的功能。但是,这不是链接 C 对象的常见做法。(也许应该是。)

这种不匹配通常是通过使用头文件来处理的。压倒性的普遍做法是从头文件中包含声明,而不是在其他源文件中手动输入它们。去做这个:

  • 创建 file1.h 并放入void p(int a);其中。
  • 在 file1.c 中,插入#include "file1.h".
  • 在 file2.c 中,插入#include "file1.h"和删除p.

在 file1.c 中包含 file1.h 的目的是让编译器可以看到 file1.h 中的声明和 file1.c 中的定义,如果它们不兼容,它会抱怨。

然后,由于 file1.h 包含在 file2.c 中,我们可以确保编译 file2.c 时看到的声明与 file1.c 中的定义兼容。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

gcc 是否有一个工具或编译器选项可以计算“编译的代码行数”?

来自分类Dev

是否有一个GCC选项将foo()视为foo(void)?

来自分类Dev

是否可以从gcc的源代码中确定或设置编译器选项?

来自分类Dev

如何在没有 gcc 编译器的情况下在 docker 中打包和发布一个简单的 c 应用程序?

来自分类Dev

gcc是否具有用于定义文件类型/编译器的编译指示?

来自分类Dev

GCC 预编译器宏 ## ,与另一个宏的标记连接

来自分类Dev

有没有办法在 GCC 或 cl.exe 的预处理和编译之间插入一个步骤?

来自分类Dev

编写一个用gcc编译的脚本

来自分类Dev

是否可以在C ++中使用一个make命令用两个不同的gcc版本编译两个不同的可执行文件?

来自分类Dev

是否可以在C ++中使用一个make命令用两个不同的gcc版本编译两个不同的可执行文件?

来自分类Dev

寻求有关安装和使用mips-gcc交叉编译器以生成自定义ASM的帮助

来自分类Dev

有时gcc在为arm abi编译C ++代码时会将第一个参数放入R1寄存器中吗?

来自分类Dev

有没有抑制默认GCC编译器选项的方法?

来自分类Dev

gcc是否有放弃-g标志的选项?

来自分类Dev

默认的gcc编译器选项是否特定于gcc版本或操作系统特定,或两者兼而有之?

来自分类Dev

pyinstaller是否有gcc -static之类的参数?

来自分类Dev

是否有一个编译器选项可用于将堆栈变量初始化为非零值(毒害)以帮助调试?

来自分类Dev

是否可以在gcc编译器中使用clang std库?

来自分类Dev

在 Qt/GCC/C++ 中;如何创建一个既捕获参数表达式文本又返回/转换参数的显式类型的包装器?

来自分类Dev

是否有一个与Erlang模式匹配等效的Python?

来自分类Dev

是否可以有一个状态-混合单子?

来自分类Dev

是否可以有一个动态的linkTo title属性?

来自分类Dev

一个UIPageViewController内是否可以有多个UIViews

来自分类Dev

是否可以有一个来回按钮?

来自分类Dev

是否有一个命令可以运行任何脚本?

来自分类Dev

在ARM下有gcc编译器吗?

来自分类Dev

在ARM下有gcc编译器吗?

来自分类Dev

有关gcc中的punning类型的编译器警告

来自分类Dev

有关gcc中的punning类型的编译器警告

Related 相关文章

  1. 1

    gcc 是否有一个工具或编译器选项可以计算“编译的代码行数”?

  2. 2

    是否有一个GCC选项将foo()视为foo(void)?

  3. 3

    是否可以从gcc的源代码中确定或设置编译器选项?

  4. 4

    如何在没有 gcc 编译器的情况下在 docker 中打包和发布一个简单的 c 应用程序?

  5. 5

    gcc是否具有用于定义文件类型/编译器的编译指示?

  6. 6

    GCC 预编译器宏 ## ,与另一个宏的标记连接

  7. 7

    有没有办法在 GCC 或 cl.exe 的预处理和编译之间插入一个步骤?

  8. 8

    编写一个用gcc编译的脚本

  9. 9

    是否可以在C ++中使用一个make命令用两个不同的gcc版本编译两个不同的可执行文件?

  10. 10

    是否可以在C ++中使用一个make命令用两个不同的gcc版本编译两个不同的可执行文件?

  11. 11

    寻求有关安装和使用mips-gcc交叉编译器以生成自定义ASM的帮助

  12. 12

    有时gcc在为arm abi编译C ++代码时会将第一个参数放入R1寄存器中吗?

  13. 13

    有没有抑制默认GCC编译器选项的方法?

  14. 14

    gcc是否有放弃-g标志的选项?

  15. 15

    默认的gcc编译器选项是否特定于gcc版本或操作系统特定,或两者兼而有之?

  16. 16

    pyinstaller是否有gcc -static之类的参数?

  17. 17

    是否有一个编译器选项可用于将堆栈变量初始化为非零值(毒害)以帮助调试?

  18. 18

    是否可以在gcc编译器中使用clang std库?

  19. 19

    在 Qt/GCC/C++ 中;如何创建一个既捕获参数表达式文本又返回/转换参数的显式类型的包装器?

  20. 20

    是否有一个与Erlang模式匹配等效的Python?

  21. 21

    是否可以有一个状态-混合单子?

  22. 22

    是否可以有一个动态的linkTo title属性?

  23. 23

    一个UIPageViewController内是否可以有多个UIViews

  24. 24

    是否可以有一个来回按钮?

  25. 25

    是否有一个命令可以运行任何脚本?

  26. 26

    在ARM下有gcc编译器吗?

  27. 27

    在ARM下有gcc编译器吗?

  28. 28

    有关gcc中的punning类型的编译器警告

  29. 29

    有关gcc中的punning类型的编译器警告

热门标签

归档