社区
C语言
帖子详情
为什么不包含头文件不报错
vv1133
2010-05-30 04:47:56
使用gcc的编译器 头文件没有包含stdlib.h,编译却没有出错
如果编译的时候加上-Wall选项,会有个警告,请问这是为什么?
...全文
733
15
打赏
收藏
为什么不包含头文件不报错
使用gcc的编译器 头文件没有包含stdlib.h,编译却没有出错 如果编译的时候加上-Wall选项,会有个警告,请问这是为什么?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
15 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
happytang
2010-05-31
打赏
举报
回复
[Quote=引用 11 楼 arong1234 的回复:]
不是告诉你了么,编译器对于没有定义过的函数原型直接当作它返回int,它不需要知道它已经定义过了
也就是说,当你以一个参数列表调用atoi时,编译器已经知道这个函数的参数列表是什么,它只不知道返回值而已,在这种情况下,编译器还需要什么额外的东西呢?它当然可以通过。
注意:编译器不关心某个函数在哪个头文件被定义,它只需要知道这个函数是什么原型即可
引用 9 楼 vv1133 的回复……
[/Quote]
这是gcc编译器的通用原则吗
vv1133
2010-05-30
打赏
举报
回复
上面有点错printf("i=%d f=%lf\n", i, f);结果没影响
baiye1134
2010-05-30
打赏
举报
回复
我是路过的
vv1133
2010-05-30
打赏
举报
回复
谢谢了
我说下测试情况
#include<stdio.h>
//#include<stdlib.h>
int main()
{
int i;
double f;
char b[5] = "23";
char c[5] = "2.3";
i = atoi(b);
f = atof(c);
printf("i=%d f=%f\n", i, f);
return 0;
}
gcc test.c -o test没有任何警告
gcc -Wall test.c -o test
出现警告:w9.c: In function `main':
w9.c:9: warning: implicit declaration of function `atoi'
w9.c:10: warning: implicit declaration of function `atof'
输出结果:
i=23 f=1717986918.000000
加上#include<stdlib.h>则结果正常
[Quote=引用 11 楼 arong1234 的回复:]
不是告诉你了么,编译器对于没有定义过的函数原型直接当作它返回int,它不需要知道它已经定义过了
也就是说,当你以一个参数列表调用atoi时,编译器已经知道这个函数的参数列表是什么,它只不知道返回值而已,在这种情况下,编译器还需要什么额外的东西呢?它当然可以通过。
注意:编译器不关心某个函数在哪个头文件被定义,它只需要知道这个函数是什么原型即可
引用 9 楼 vv1133 的回……
[/Quote]
arong1234
2010-05-30
打赏
举报
回复
不是告诉你了么,编译器对于没有定义过的函数原型直接当作它返回int,它不需要知道它已经定义过了
也就是说,当你以一个参数列表调用atoi时,编译器已经知道这个函数的参数列表是什么,它只不知道返回值而已,在这种情况下,编译器还需要什么额外的东西呢?它当然可以通过。
注意:编译器不关心某个函数在哪个头文件被定义,它只需要知道这个函数是什么原型即可
[Quote=引用 9 楼 vv1133 的回复:]
多谢,可是我还是没弄明白,没有包含这个头文件,编译器是怎么知道atoi这个函数已经定义过了?
引用 5 楼 arong1234 的回复:
这是因为C语言一个非常傻的规定:一个函数如果没有声明函数原型,其返回值类型就是int(所谓的implicit declaration)。由于atoi恰好真返回int,所以你即使不包含它的头文件也不报错。至于这个警告,是为了避免你由于忘记声明函数原型而出错……
[/Quote]
cattycat
2010-05-30
打赏
举报
回复
arong说的真不错
vv1133
2010-05-30
打赏
举报
回复
多谢,可是我还是没弄明白,没有包含这个头文件,编译器是怎么知道atoi这个函数已经定义过了?
[Quote=引用 5 楼 arong1234 的回复:]
这是因为C语言一个非常傻的规定:一个函数如果没有声明函数原型,其返回值类型就是int(所谓的implicit declaration)。由于atoi恰好真返回int,所以你即使不包含它的头文件也不报错。至于这个警告,是为了避免你由于忘记声明函数原型而出错。
个人建议你还是把stdlib.h包含上,虽然隐式声明可以帮助你,不过还是建议避免使用这种比较傻的特性。
引用 4 楼 vv1133……
[/Quote]
ArtiFly2000
2010-05-30
打赏
举报
回复
默认情况下,gcc帮你自动纠错了,gcc的纠错能力还是很强的
wall参数就是告诉gcc在自动纠错的同时,将错误的地方通知你一下,所有gcc就给你个warning
东莞某某某
2010-05-30
打赏
举报
回复
[Quote=引用 5 楼 arong1234 的回复:]
这是因为C语言一个非常傻的规定:一个函数如果没有声明函数原型,其返回值类型就是int(所谓的implicit declaration)。由于atoi恰好真返回int,所以你即使不包含它的头文件也不报错。至于这个警告,是为了避免你由于忘记声明函数原型而出错。
个人建议你还是把stdlib.h包含上,虽然隐式声明可以帮助你,不过还是建议避免使用这种比较傻的特性。
引用 4 楼 vv1133 ……
[/Quote]
阿荣哥,拜一个!
东莞某某某
2010-05-30
打赏
举报
回复
[Quote=引用 4 楼 vv1133 的回复:]
因为atoi函数在stdlib.h中才有声明,警告是warning: implicit declaration of function `atoi'
为什么说是隐式声明atoi函数,在哪隐式声明的?
引用 2 楼 arong1234 的回复:
为什么一定要stdlib.h?不是说每个程序都必须包含某个头文件的
遇到的警告是什么?
引用楼主 vv1133 的回复:
使用gcc的编译……
[/Quote]
是不是因为没有包含stdlib.h,即没有显示声明stoi函数,所以叫做“隐式声明”。include一下,是不是就没有这个警告了
arong1234
2010-05-30
打赏
举报
回复
这是因为C语言一个非常傻的规定:一个函数如果没有声明函数原型,其返回值类型就是int(所谓的implicit declaration)。由于atoi恰好真返回int,所以你即使不包含它的头文件也不报错。至于这个警告,是为了避免你由于忘记声明函数原型而出错。
个人建议你还是把stdlib.h包含上,虽然隐式声明可以帮助你,不过还是建议避免使用这种比较傻的特性。
[Quote=引用 4 楼 vv1133 的回复:]
因为atoi函数在stdlib.h中才有声明,警告是warning: implicit declaration of function `atoi'
为什么说是隐式声明atoi函数,在哪隐式声明的?
引用 2 楼 arong1234 的回复:
为什么一定要stdlib.h?不是说每个程序都必须包含某个头文件的
遇到的警告是什么?
引用楼主 vv1133 的回复:
使用gcc的编……
[/Quote]
vv1133
2010-05-30
打赏
举报
回复
因为atoi函数在stdlib.h中才有声明,警告是warning: implicit declaration of function `atoi'
为什么说是隐式声明atoi函数,在哪隐式声明的?
[Quote=引用 2 楼 arong1234 的回复:]
为什么一定要stdlib.h?不是说每个程序都必须包含某个头文件的
遇到的警告是什么?
引用楼主 vv1133 的回复:
使用gcc的编译器 头文件没有包含stdlib.h,编译却没有出错
如果编译的时候加上-Wall选项,会有个警告,请问这是为什么?
[/Quote]
happytang
2010-05-30
打赏
举报
回复
warning all
arong1234
2010-05-30
打赏
举报
回复
为什么一定要stdlib.h?不是说每个程序都必须包含某个头文件的
遇到的警告是什么?[Quote=引用楼主 vv1133 的回复:]
使用gcc的编译器 头文件没有包含stdlib.h,编译却没有出错
如果编译的时候加上-Wall选项,会有个警告,请问这是为什么?
[/Quote]
AlanBruce
2010-05-30
打赏
举报
回复
...................
C++的
头文件
问题
关于C的
头文件
问题,介绍了
头文件
避免重复
包含
的问题
如何在C++中添加
头文件
,c++万能库
头文件
在C++中,添加
头文件
通常涉及以下几个步骤: 确定需要
包含
的
头文件
:首先,你需要知道你的程序需要哪些库的功能。这取决于你的程序要做什么。例如,如果你的程序需要输入输出功能,你可能需要
包含
头文件
。
包含
头文件
:在你的C++源代码文件的顶部,使用#include预处理指令来
包含
头文件
。这告诉编译器在编译之前
包含
这个
头文件
的内容。
头文件
的路径可以是相对路径、绝对路径或者标准库路径。对于标准库
头文件
,你通常不需要提供路径,只需提供文件名即可。 使用
头文件
中的声明:一旦你
包含
了
头文件
,你就可以在源代码中使用该
头文件
中声明的类型、函数、类等。 确保
头文件
存在且路径正确:编译器在编译时会查找
包含
的
头文件
。如果找不到文件,编译器会
报错
。确保你
包含
的
头文件
存在于你的项目目录或编译器的
包含
路径中。 避免重复
包含
:为了避免同一个
头文件
被多次
包含
,通常会在
头文件
的开头和结尾使用预处理器指令来防止重复
包含
编译程序:最后,使用C++编译器编译你的程序。编译器会处理所有的#include指令,并将
包含
的
头文件
内容插入到源代码的相应位置,然后编译整个程序。
《C深度解析》第二章 C预编译——宏定义、条件编译、
头文件
包含
、特殊预编译关键字
(3)条件编译:#if、#else、#elif #endif、#ifdef和#ifndef、#if与defined、条件编译与配置文件 (4)一些特殊的预编译关键字与实际应用:defined、#error、#line、#与##、#pragma (5)文件
包含
:是否只能
包含
.h...
atlimage 文件
CImage类是ATL和MFC共用的一个类,其
头文件
为atlimage.h,主要用于图片文件的打开,显示与保存。这里需要注意的是,在VS2010和VS2012的MFC编程中,不需要将
头文件
包含
进来。MFC中要使用CImage类,必须先将
头文件
包含
进来,可以
包含
在当前代码的CPP文件中,也可以
包含
在所属类的
头文件
中,不过最好还是
包含
在工程的stdafx.h文件中。
Vs
头文件
系列 admex。h
Vs
头文件
系列 admex。hS
头文件
中include
头文件
,可以通过相对路径,绝对路径,直接将文件
包含
进来,比如在上上个目录下有
头文件
:common.h,需要
包含
进来,则直接include “../../commo.h” 或者已经知道common.h文件在D:/下,则可以直接include “D:/common.h” 2 还可以直接通过,属性配置下的,VC++ 目录--
包含
目录--将目录
包含
进来,则这个时候只需要include “common.h”就可以了,而不需要去管common文件具体在哪个地方 3 该
头文件
的
包含
是不需要将代码添加到工程里面的,但是如果,对应该
头文件
还有cpp或者库文件,则要将属性配置对库文件进行配置,包括,库文件位置和名称,否则会
报错
:找不到定义 --------------------- 本文来自 跬步达千里 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/LIYUAN123ZHOUHUI/article/details/51604182?utm_source=copy
C语言
69,382
社区成员
243,073
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章