鱼C论坛

 找回密码
 立即注册
查看: 935|回复: 6

[已解决]gcc编译时的提示信息

[复制链接]
发表于 2023-7-2 22:42:23 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
test.c 的代码
#include <stdlib.h>

int main() {
    char ts[] = "132";
    int ti = atoi(ts);
    printf("%i\n", ti);
}

终端输入:gcc test.c -o test
然后成功编译,我执行了./test结果也是对的
那他的提示信息是什么意思?stdlib里不是有stdio了吗,还有我用devc++的话它会直接报错
提示信息如下
PS E:\C> gcc test.c -o test
test.c: In function 'main':
test.c:6:5: warning: implicit declaration of function 'printf' [-Wimplicit-function-declaration]
     printf("%i\n", ti);
     ^~~~~~
test.c:6:5: warning: incompatible implicit declaration of built-in function 'printf'
test.c:6:5: note: include '<stdio.h>' or provide a declaration of 'printf'
test.c:2:1:
+#include <stdio.h>

test.c:6:5:
     printf("%i\n", ti);
     ^~~~~~
最佳答案
2023-7-2 22:51:58
歌者文明清理员 发表于 2023-7-2 22:50
那为啥我在luogu上就不会有这样的问题?而且我这样输出也是对的

对于这个问题,原因可能是编译环境或编译器设置不同。

在某些情况下,编译器会为某些函数隐式包含它们的头文件,如GCC编译器在某些情况下可能会隐式地包含  <stdio.h> ,所以在你的情况下,尽管没有显式包含  <stdio.h> , printf  函数依然可以正常工作。不过,这种行为并不是所有编译器都会有,也可能会受编译器版本或设置的影响。因此,通常推荐在使用库函数时显式包含其头文件,这样可以确保代码的移植性。

至于你在洛谷(Luogu)上编译没有问题,可能是因为他们的编译环境或设置允许这种隐式包含行为。但是这不意味着这是一种良好的编程习惯,显式包含你正在使用的所有库的头文件,可以避免潜在的编译问题,提高代码的可读性和可移植性。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-7-2 22:47:56 | 显示全部楼层
从你给的提示信息看,你的代码中没有包含  <stdio.h> 。 <stdlib.h>  并不包含  <stdio.h> ,它们是两个不同的标准库,分别定义了不同的函数和宏。

printf  函数在  <stdio.h>  中被声明,而不是在  <stdlib.h>  中。当编译器遇到一个它不认识的函数时,它会假设这个函数的所有参数都是 int 类型,且返回值也是 int 类型。这就是“implicit declaration”(隐式声明)。但实际上  printf  的声明并非如此,所以编译器发出了警告。

因此,你需要在你的代码中包含  <stdio.h> 。以下是修改后的代码:
#include <stdlib.h>
#include <stdio.h>

int main() {
    char ts[] = "132";
    int ti = atoi(ts);
    printf("%i\n", ti);
}
这样,你的代码应该就不会再有警告信息了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-2 22:50:43 | 显示全部楼层
isdkz 发表于 2023-7-2 22:47
从你给的提示信息看,你的代码中没有包含   。   并不包含   ,它们是两个不同的标准库,分别定义了不同的 ...

那为啥我在luogu上就不会有这样的问题?而且我这样输出也是对的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-2 22:51:58 | 显示全部楼层    本楼为最佳答案   
歌者文明清理员 发表于 2023-7-2 22:50
那为啥我在luogu上就不会有这样的问题?而且我这样输出也是对的

对于这个问题,原因可能是编译环境或编译器设置不同。

在某些情况下,编译器会为某些函数隐式包含它们的头文件,如GCC编译器在某些情况下可能会隐式地包含  <stdio.h> ,所以在你的情况下,尽管没有显式包含  <stdio.h> , printf  函数依然可以正常工作。不过,这种行为并不是所有编译器都会有,也可能会受编译器版本或设置的影响。因此,通常推荐在使用库函数时显式包含其头文件,这样可以确保代码的移植性。

至于你在洛谷(Luogu)上编译没有问题,可能是因为他们的编译环境或设置允许这种隐式包含行为。但是这不意味着这是一种良好的编程习惯,显式包含你正在使用的所有库的头文件,可以避免潜在的编译问题,提高代码的可读性和可移植性。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-2 22:55:53 | 显示全部楼层
直接
#include <bits/stdc++.h>
不好吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-2 22:57:05 | 显示全部楼层

我用的是 c 语言
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-2 22:58:45 | 显示全部楼层

az……
没注意看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-28 01:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表