首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么gcc报告"隐含的函数声明'轮''?

这个问题是关于编译器(GCC)报告隐含的函数声明时出现的错误。这个错误提示表明,编译器在某个地方遇到了一个未声明的函数,但是它试图去推断这个函数的原型。这种情况通常会在使用旧式的C语言代码或者在函数声明的位置出现错误时发生。

这个问题的解决方法包括:

  1. 确保函数原型已经在使用之前声明。在函数调用之前,应该有一个函数原型,例如:
代码语言:c
复制
int my_function(int arg1, int arg2);
  1. 确保函数原型和实现使用相同的参数类型和返回类型。如果这些类型不匹配,编译器可能会报告隐含的函数声明。
  2. 如果使用的是旧式的C语言代码,考虑将其更新为更现代的C语言标准。这可以通过在编译命令中添加特定的选项来完成,例如:
代码语言:bash
复制
gcc -std=c99 myfile.c -o myfile
  1. 检查代码中是否存在拼写错误或者大小写错误。这些错误可能导致编译器无法找到正确的函数声明。

如果这些方法都无法解决问题,请考虑查阅GCC文档或者寻求其他开发者的帮助。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

深度刨析makefile

为什么要有 makefile 我们在学习 Linux 的时候,一般都是直接通过 gcc 对源文件进行编译的,我们可以通过指定 gcc 的参数来指定生成什么样的文件、使用哪个库、在哪个路径搜索等等。...这里的 .PHONY 是声明伪目标的意思。...声明为伪目标就可以解决这个问题,其实就是把 clean 作为特殊目标 .PHONY 的依赖,这样就保证了不管当前是否有 clean 同名文件,伪目标后面的命令都可以执行,并且 make 不会去推导构建伪目标的隐含规则...例1:如果变量 CC 值为 gcc 使用 gcc 编译,否则使用 g++ 编译。...首先准备几个文件,头文件 my_print.h 中声明了一些函数接口,这些函数接口在 my_print.c 和 print_hello.c 中实现,并在 main.c 中调用。

14010

makefile从入门到放弃——博主吐血整理的笔记

$@ main.o:main.c gcc $(CFLAGS) main.c -o mian.o .PHONY:clean clean: rm *.o test makefile的隐含规则 隐含规则...1:编译C语言的隐含规则 .o的目标的依赖目标会自动推导为.c,并且其生成命令是(CC) -c (CPPFLAGS) include config.mk test:$(OBJS) gcc $(OBJS...) -o test .PHONY:clean clean: rm *.o test 隐含规则2:链接Object文件的隐含规则 n目标依赖于n.o,通过运行C语言编译器来运行链接程序生成(一般是“ld...y.o -o x 注意:如果没有一个源文件(如上例中的x.c)和目标名字(如上例中的x)相关联,那么最好写出自己的生成规则,不然,隐含规则会报错。...Makefile 中还有两个变量不管是不是使用关键字 “export” 声明,它们总会传递到下层的 Makefile 中。

1.7K20
  • C语言关键字表

    (附)C语言关键字表 关键字 说明 auto 声明自动变量 break 跳出当前循环 case 开关语句分支 char 声明字符型变量或函数返回值类型 const 声明只读变量 continue...结束当前循环,开始下一轮循环 default 开关语句中的“其它”分支 do 循环语句的循环体 double 声明双精度浮点型变量或函数返回值类型 else 条件语句否定分支(与 if 连用) enum...声明枚举类型 extern 声明变量或函数是在其它文件或本文件的其他位置定义 float 声明浮点型变量或函数返回值类型 for 一种循环语句 goto 无条件跳转语句 if 条件语句 int 声明整型变量或函数...long 声明长整型变量或函数返回值类型 register 声明寄存器变量 return 子程序返回语句(可以带参数,也可不带参数) short 声明短整型变量或函数 signed 声明有符号类型变量或函数...union 声明共用体类型 void 声明函数无返回值或无参数,声明无类型指针 volatile 说明变量在程序执行中可被隐含地改变 while 循环语句的循环条件 _Packed 指定结构、联合和枚举类型的对齐方式

    10910

    C语言为什么只需要include就能使用里面声明的函数?

    有人问:C语言为什么只需要include就能使用里面声明的函数?这是一个看起来非常简单的问题,但是很多初学者,甚至学了很久的人都可能没有搞明白。 为什么包含即可用?...所以实际上,你只是在你的.c中声明了这些函数,既然声明了,那么你就可以使用。但是你要想真正用到它,还需要找到它的定义。这是在链接阶段做的事情。...在这种情况下,你必须告诉它,我要用pow函数,并且你要去math库找,于是,按照下面的方式进行编译链接: $ gcc -o pow pow.c -lm 就可以了。...(-lm表示需要链接math库) 当然了,对于C++,使用pow函数不用链接math库也是可以的,为什么呢?请移步这里《C++为什么不需要单独链接math库?》。 不包含可以用吗?...不过这样不建议,因为一旦出现自己声明的与实际的不符合,就可能导致意料不到的事情发生。 总结 stdio.h里面的函数,包含即可用,只是巧合而已。包含并调用,只是表明你要用,而能不能用,取决于你有没有。

    1.4K20

    性能测试工具CPU profiler(gperftools)的使用心得

    版权声明:本文为博主原创文章,转载请注明源地址。.../myprogram 这个简单办法,不需要修改自己的程序,但我一直没有尝试成功,不能生成性能报告文件(如果有朋友知道为什么,请不吝赐教),最终还是通过修改自己的程序,在程序开始和结束位置分别加入ProfilerStart...ProfilerStop(); } 因为在代码中加入了ProfilerStart函数指定了生成性能报告的文件名,所以在执行程序时就不一定需要CPUPROFILE=/tmp/profile再指定性能报告文件名...节点信息说明 图形风格的性能报告由节点和有向边组成, 每个节点代表一个函数,节点数据格式: 字段名 描述 Class Name 类名,非类成员函数此项为空 Method Name 函数名 local (...如果采样次数过少,则你会发现同样的程序同样的数据,每次输出的性能报告中的热点都不一样。 所以在我的实际应用中,通过循环运行测试程序函数,大幅度提高采样次数。这样才能获得一个稳定的准确的性能报告。

    16K20

    ⭐️ 关键字深度剖析 ⭐️第一章(变量&关键字autoregister)

    目录 前言 关键字分类 第一个C程序 变量 什么是变量 如何定义变量 为什么定义变量  变量定义的本质 变量声明的本质 变量的分类 变量的作用域 变量的生命周期 作用域 vs 生命周期 关键字-auto...,对 C99 支持的并不好) 默认情况使用 C90 即认为 32 个 关键字 说明 auto 声明自动变量 short 声明短整型变量或函数 int 声明整型变量或函数 long 声明长整型变量或函数...float 声明浮点型变量或函数 double 声明双精度变量或函数 char 声明字符型变量或函数 struct 声明结构体变量或函数 union 声明共用数据类型 enum 声明枚举类型 typedef...static 声明静态变量 volatile 说明变量在程序执行中可被隐含地改变 void 声明函数无返回值或无参数,声明无类型指针 if 条件语句 else 条件语句否定分支(与 if...,开始下一轮循环 break 跳出当前循环 default 开关语句中的“ 其他 ” 分支 sizeof 计算数据类型长度 return 子程序返回语句(可以带参数,

    39140

    gcc内嵌汇编详解

    有时候我们希望在C/C++代码中使用嵌入式汇编,因为C中没有对应的函数或语法可用。...比如我最近在ARM上写FIR程序时,需要对最后的结果进行饱和处理,但gcc没有提供ssat这样的函数,于是不得不在C代码中嵌入汇编指令。 1....隐式改变寄存器 有的汇编指令会隐含修改一些不在指令操作数中的寄存器,为了让gcc知道这个情况,将隐式改变寄存器规则列在输入规则之后。.../输出规则中列出的寄存器不能和隐含改变规则中的寄存器有交叉。...以指定寄存器语法声明的变量,所占用的寄存器也不能和隐含改变规则有交叉。这个应该好理解:隐含改变规则是告诉gcc有额外的寄存器需要照顾,自然不能和输入/输出寄存器有交集。

    2.9K20

    【记忆卡片】C语言32个关键字

    C语言的关键字共有32个,可分其为 数据类型关键字、控制语句关键字、存储类型关键字以及其它关键字 数据类型关键字(12个): (1) char :声明字符型变量或函数 (2) double :声明双精度变量或函数...(3) enum :声明枚举类型 (4) float:声明浮点型变量或函数 (5) int: 声明整型变量或函数 (6) long :声明长整型变量或函数 (7) short :声明短整型变量或函数...(12) void :声明函数无返回值或无参数,声明无类型指针 控制语句关键字(12个): A循环语句: for:一种循环语句 do :循环语句的循环体 while :循环语句的循环条件...break:跳出当前循环 continue:结束当前循环,开始下一轮循环 B条件语句: if: 条件语句 else:条件语句否定分支(与 if 连用) goto:无条件跳转语句...其它关键字(4个): const :声明只读变量 sizeof:计算数据类型长度 typedef:用以给数据类型取别名(当然还有其他作用) volatile:说明变量在程序执行中可被隐含地改变

    2.2K70

    手把手教你写一个 Makefile 文件

    然后再把大量的Object File合成执行文件,这个动作叫作链接(link)。 编译时,编译器需要的是语法的正确,函数与变量的声明的正确。...总结一下,编译链接的过程如下: 源文件首先会生成中间目标文件,再由中间目标文件生成执行文件。 在编译时,编译器只检测程序语法,和函数、变量是否被声明。...如果函数未被声明,编译器会给出一个警告,但可以生成Object File。...,省略版和基础版的结果是一样的,省略版的makefile中去掉了生成main.o、openFile.o、readFile.o和writeFile.o这些目标的依赖和生成命令,这就是make的隐含规则,make...会试图去自动推导产生这些目标的依赖和生成命令,这个行为就是隐含规则的自动推导。

    1.6K10

    C语言中的32个关键字

    关键字 说明 auto 声明自动变量 short 声明短整型变量或函数 int 声明整型变量或函数 long 声明长整型变量或函数 float 声明浮点型变量或函数 double 声明双精度变量或函数...char 声明字符型变量或函数 struct 声明结构体变量或函数 union 声明共用数据类型 enum 声明枚举类型 typedef 用以给数据类型取别名 const 声明只读变量 unsigned...声明无符号类型变量或函数 signed 声明有符号类型变量或函数 extern 声明变量是在其他文件正声明 register 声明寄存器变量 static 声明静态变量 volatile 说明变量在程序执行中可被隐含地改变...void 声明函数无返回值或无参数,声明无类型指针 if 条件语句 else 条件语句否定分支(与 if 连用) switch 用于开关语句 case 开关语句分支 for 一种循环语句 do 循环语句的循环体...while 循环语句的循环条件 goto 无条件跳转语句 continue 结束当前循环,开始下一轮循环 break 跳出当前循环 default 开关语句中的“其他”分支 sizeof 计算数据类型长度

    1.1K30

    Linux makefile 教程 非常详细,且易懂

    然后再把大量的Object File合成执行文件,这个动作叫作链接(link)。 编译时,编译器需要的是语法的正确,函数与变量的声明的正确。...在编译时,编译器只检测程序语法,和函数、变量是否被声明。如果函数未被声明,编译器会给出一个警告,但可以生成Object File。.../headers”,这正是cc或gcc搜索头文件路径的参数。 三、文件名操作函数 下面我们要介绍的函数主要是处理文件名的。每个函数的参数字符串都会被当做一个或是一系列的文件名来对待。...为什么需要使用这样的步骤?...Make默认的编译命令是“cc”,如果你把变量“(CC)”重定义成“gcc”,把变量“(CFLAGS)”重定义成“-g”,那么,隐含规则中的命令全部会以“gcc –c -g (CPPFLAGS)”的样子来执行了

    4.3K20

    【makefile】

    (4)变量在声明时需要给予初值,而在使用时,需要在变量名前加上 “ $ ” 符号。...2.2隐含规则 GNU make 包含有一些内置的或隐含的规则,这些规则定义了如何从不同的依赖文件建立特定类型的目标。...GNU make 支持两种类型的隐含规则: (1)后缀规则(Suffix Rule)。后缀规则是定义隐含规则的老风格方法。...2.4 Makefile中的函数 在Makefile中可以使用函数来处理变量,从而让命令或规则更为的灵活和具有智能,函数调用,很像变量的使用,也是以“$”来标识的,函数调用后,函数的返回值可以当做变量来使用...例如:'wildcard' 的函数,可以展开成一列所有符合由其参数描述的文件名,文件之间以空格间隔。

    2K00

    c 语言学习第一天

    修饰,那么它的值就不能再被改变 continue 结束当前循环,开始下一轮循环 default 开关语句中的"其它"分支 do 循环语句的循环体 double 声明双精度浮点型变量或函数返回值类型 else...条件语句否定分支(与 if 连用) enum 声明枚举类型 extern 声明变量或函数是在其它文件或本文件的其他位置定义 float 声明浮点型变量或函数返回值类型 for 一种循环语句 goto...无条件跳转语句 if 条件语句 int 声明整型变量或函数 long 声明长整型变量或函数返回值类型 register 声明寄存器变量 return 子程序返回语句(可以带参数,也可不带参数) short...声明短整型变量或函数 signed 声明有符号类型变量或函数 sizeof 计算数据类型或变量长度(即所占字节数) static 声明静态变量 struct 声明结构体类型 switch 用于开关语句...typedef 用以给数据类型取别名 unsigned 声明无符号类型变量或函数 union 声明共用体类型 void 声明函数无返回值或无参数,声明无类型指针 volatile 说明变量在程序执行中可被隐含地改变

    24900

    Makefile经典教程(掌握这些足够)

    然后再把大量的Object File合成执行文件,这个动作叫作链接(link)。 编译时,编译器需要的是语法的正确,函数与变量的声明的正确。...在编译时,编译器只检测程序语法,和函数、变量是否被声明。如果函数未被声明,编译器会给出一个警告,但可以生成Object File。.../headers”,这正是cc或gcc搜索头文件路径的参数 。 三、文件名操作函数 下面我们要介绍的函数主要是处理文件名的。...endif endif 当然,你也许会说,使用override关键字不就可以重新定义环境中的变量了吗?为什么需要使用这样的步骤?...Make默认的编译命令是“cc”,如果你把变量“$(CC)”重定义成“gcc”,把 变量“$(CFLAGS)”重定义成 “-g”,那么,隐含规则中的命令全部会以“gcc –c -g $(CPPFLAGS

    2.8K20

    Makefile总结

    目前centos 7.3 GNU的make版本是3.82 为什么要用Makefile 在做C/C++开发过程中,比如有如下文件: a.c b.c main.c 编译生成可执行二进制文件 gcc a.c...clean: rm *.o helloworld 注释 行前面加”#”号,如#g++ main.o test.o -o helloworld 表示注释了该行 变量 变量在声明时赋予初值...Makefile中有一些预定义函数,形式 $(函数名 参数列表) 参数列表:以逗号分隔 函数名和参数之间用空格分开 函数1:shell 获取当前目录路径: PWD = $(shell pwd) 函数2...这种情况可以使用伪目标来解决,可避免在makefile中定义的执行命令目标和当前目录下实际文件名冲突。 一旦定义为伪目标,make执行规则不会去查找隐含规则,同样也提高了效率。...MAKE) -C src clean 参数传递 主Makefile在调用子目录Makefile,有时我们需要传递参数,两种方法: 方法一: 在上层Makefile中使用”export”关键字对要传递的变量进行声明

    98210

    c语言里void什么作用,C语言中void是什么意思?

    C语言中“void”表示为无类型,相应的“void *”为无类型指针,常用在程序编写中对定义函数的参数类型、返回值、函数中指针类型进行声明,其作用是对函数返回和参数的进行限定。...C语言关键字 auto :声明自动变量 break:跳出当前循环 case:开关语句分支 char :声明字符型变量或函数返回值类型 const :声明只读变量 continue:结束当前循环,开始下一轮循环...default:开关语句中的“默认”分支 do :循环语句的循环体 double :声明双精度浮点型变量或函数返回值类型 else :条件语句否定分支(与 if 连用) enum :声明枚举类型 extern...:声明变量或函数是在其它文件或本文件的其他位置定义 float:声明浮点型变量或函数返回值类型 for:一种循环语句 goto:无条件跳转语句 if:条件语句 int: 声明整型变量或函数 long :...union:声明共用体类型 void :声明函数无返回值或无参数,声明无类型指针 volatile:说明变量在程序执行中可被隐含地改变 while :循环语句的循环条件 推荐教程:《C#》 发布者:全栈程序员栈长

    3.6K20

    c和fortran混编

    比如简单的一个c程序: /* main.c */ void FOO (); /* 其实按c语言的规定,调用程序之前不需声明, * c编译器会猜测函数的原型。...如果一个函数仅仅有什么声明,那么是不会编译出它的符号的,因为它既不会给别人用,也不会用别人。...就像c++要用c库,也需要在声明这个库中的函数时使用extern “C”,使c++编译器在编译这个函数时生成的符号名是C风格而不是C++风格。...这也就是为什么时常有人问gcc main.cc会出错的问题了,如果main.cc用到了c++库中的函数,那么当然要使用gcc -lstdc++ main.cc才行了) 如果我们保持main.c不变,...这是编译器(f77)的一个命名规则,没有为什么,它就是把你在fortran中的函数名字全转换成小写,然后在最后加一个下划线。我昨天搜了很多版本,头昏脑胀,怎么调都说找不到,也没有想到要自己看看。

    1.6K41

    Linux下库文件制作方法详解

    大家好,继上节,这节我们继续讲解如何在Linux系统上创建我们需要的库文件 在创建程序库之前,需要先来了解GCC的一些参数,因为静态库和共享库需要GCC工具产生,并且两者的GCC参数不同...编译器查找动态连接库时有隐含的命名规则,即在给出的名字前面加上lib,后面加上.so来确定库的名称 -L 表示要连接的库目录 -fPIC 表示编译为位置独立的代码,用于编译共享库。...-l 指定了静态函数库名,由于静态函数库的命名方式是lib***.a,其中的lib和.a忽略 -L 指定静态函数库的查找目录,L后面'.'...,表示静态函数库在本目录下查找 制作共享库 生成共享库 // 用下面两个命令 gcc -fPIC -o libTest.o -c Test.c gcc -shared -o libTest.so libTest.o...执行可执行程序 在执行可执行程序时,出现以下错误,说找不到库文件,在继续往下看之前大家想想这是为什么?

    2.2K30

    关键字

    C语言的关键字(32个)一、 数据类型关键字(12个)    (1) char :声明字符型变量或函数    (2) double :声明双精度变量或函数    (3) enum :声明枚举类型   ...12) void :声明函数无返回值或无参数,声明无类型指针(基本上就这三个作用)二、控制语句关键字(12个)A循环语句    (1) for:一种循环语句(可意会不可言传)    (2) do :循环语句的循环体...    (3) while :循环语句的循环条件    (4) break:跳出当前循环    (5) continue:结束当前循环,开始下一轮循环B条件语句    (1)if: 条件语句    (2...其他”分支 D返回语句    (4)return :函数返回语句,用于返回各种类型的值三、存储类型关键字(4个)    (1)auto :声明自动变量    (2)extern:声明变量是在其他文件正声明...计算数据类型长度,返回int类型的值    (3)typedef:用以给数据类型取别名(当然还有其他作用)    (4)volatile:说明变量在程序执行中可被隐含地改变C++的关键字(10个)

    16210
    领券