不包含全头文件的后果相当严重

如何包含头文件最多只有一次?搜索路径?头文件包含?VS2019的c代码不包含stdio.h就无法编译通过?系统头文件路径?-I <头文件PATH>一定会最先搜索吗? 早期,标准的C语言采用#ifndef/#define的模式让头文件永远只能被包含一次,避免重复。事实上,这种写法更多是利用了条件编译宏,如果不小心将不同头文件用了同一个宏判断,会出现稀奇古怪的错误。ObjC引入了#import包含头文件,以编译器做担保,只能包含一次。一种非标准,但是不少编译器支持的新写法是#pragma once,GCC、Clang、MSVC都支持这种扩展写法。 阅读详情
#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <string.h>
#include <stdlib.h>
//#include <sys/types.h>    //BUG
//#include <arpa/inet.h>    //BUG


int main(void)
{
    int socketfd,socketfd_server;
    struct sockaddr_in myaddr,cliaddr;
    socklen_t addrlen;
    
    socketfd=socket(PF_INET,SOCK_STREAM,0);
    memset(&myaddr,0,sizeof(myaddr));
    myaddr.sin_family=PF_INET;
    myaddr.sin_port=htons(8000);
    myaddr.sin_addr.s_addr=inet_addr("127.0.0.1");
    addrlen=sizeof(myaddr);
    bind(socketfd,(struct sockaddr*)&myaddr,addrlen);
    listen(socketfd,10);

    addrlen=sizeof(cliaddr);
    memset(&cliaddr,0,sizeof(cliaddr));
//    while(1)
//        {
    socketfd_server=accept(socketfd,(struct sockaddr*)&cliaddr,&addrlen);//这里需要注意是&addrlen
    printf("欢迎登录%s端口:",inet_ntoa(cliaddr.sin_addr));
    printf("hello\n");
    printf("欢迎登录端口:%hd",ntohs(cliaddr.sin_port));
    close(socketfd_server);
    
//        }
    
}

gcc编译时报警告

liu@XXXXX:~/FAR_SIGHT/Day_30/Day_30/LAB$ gcc Server.c

Server.c: In function ‘main’:

Server.c:30:2: warning: format ‘%s’ expects type ‘char *’, but argument 2 has type ‘int’

man inet_ntoa

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
INET(3)                    Linux Programmer's Manual                   INET(3)

NAME
       inet_aton,    inet_addr,    inet_network,   inet_ntoa,   inet_makeaddr,
       inet_lnaof, inet_netof - Internet address manipulation routines

SYNOPSIS
       #include <sys/socket.h>
       #include <netinet/in.h>
       #include <arpa/inet.h>

       int inet_aton(const char *cp, struct in_addr *inp);

       in_addr_t inet_addr(const char *cp);

       in_addr_t inet_network(const char *cp);

       char *inet_ntoa(struct in_addr in);

       struct in_addr inet_makeaddr(int net, int host);

       in_addr_t inet_lnaof(struct in_addr in);


为什么会有头文件循环依赖?搜索路径?头文件包含?如何包含头文件最多只有一次? 有头文件的编程语言体系中,头文件的本意是给其他文件提供基本的类型、声明或者宏等讯息供参考,让编译器知晓这些类型讯息。一般的原则是,越是common的头文件会被其他头文件依赖,即xxx.h很可能会包含common.h. 但定义common以及不同头文件的依赖很可能陷入一个困境,大家都想要对方头文件的讯息,这就出现了头文件循环依赖。 阅读详情

相关推荐

如何避免头文件被重复包含

如何避免头文件被重复包含? 一般情况下,我们都是把函数声明、类定义、模板定义等写到一个头文件里,需要时将相应的头文件用#include包含到源文件(*.cpp文件)里来。但头文件中又允许包含其它的头文件,这样就难免发生某个头文件被重复地包含。我们可以使用编译预处理命令避免这种情况的发生。 例如,你想确保头文件max.h不会被重复包含,则你可以采取如下的形式:

chenshuzhenteacher的专栏 1万+

编译报错,未包含相应头文件。c++ string 和c字符串之间的转化

使用key_t需要包含头文件 #include ifstream ifs(json);

A_king 335

C++包含头文件几种方式

当我们需要包含好几个外部引入的头文件的时候,我们如何分类并轻松的导入头文件呢?相信很多新手对于头文件导入还是不太清楚,以至于他们会将所有的文件名全部放入到一个文件夹中,然后将这个文件夹包含在项目里。 一方面,所有文件混在一起,让管理变得麻烦。虽然说是可以用,但是太不优雅了。另一方面,如果将各种头文件都分成多个文件夹存放,那就需要导入多个文件夹的路径。有没有更优雅又方便的做法呢?当然有,请往下看。 ...

希望我的博客,能帮上你解决学习中工作中所遇到的问题 4138

c语言中关于不包含头文件string.h仍然可以使用strlen函数以及strlen函数计算数组时结果问题

先说头文件string.h里的strlen函数 strlen所作的仅仅是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符’\0’为止,然后返回计数器值。 于是我就突发奇想用strlen计算数组会发生什么,由于我是初学者想当然的认为结果就是不完全初始化的整型数组中初始化了的数组数乘以四(即3乘4),结果结果却是这样的 于是我就很疑惑,是我没有包含头文件string.h吗? 于是我又包含string.h运行了一

weixin_59480621的博客 2089

Unity游戏Mono注入实战:从反编译到功能扩展

本文详细介绍了Unity游戏Mono注入的完整实战流程,从使用dnSpy反编译游戏核心逻辑,到编写自定义C#功能DLL,再到利用SharpMonoInjector进行动态注入。文章深入讲解了如何通过Harmony库拦截修改游戏方法,并介绍了使用MelonLoader框架和UnityExplorer进行高级模组开发与调试,最终通过一个游戏对象透视(ESP)案例演示了功能扩展的实现。

weixin_29018335的博客 458

数字逻辑设计大程——以撒的结合(Verilog语言)

前言 在大二学习数字逻辑设计课程(即计算机组成课程的前引课)时,期末大程题目我和同组的github成员lwaekfjlk 决定写一款基于Verilog语言的游戏。原型是我们两人都非常喜爱的一款游戏——The Binding of Isaac: Rebirth。在三天三夜的奋战后,基本完成了预期目标。由于亲自编写了其中种种,我们深知新手初期使用Verilog语言有多困难。而可悲的是,这又是之后计算机组成课程和体系结构课程所需的!因此,我们将top部分源码放在这里,供同袍们参考。若想引用还请注明出处。 代码部分

LuvLucifer的博客 1383

在vs中明明包含该头文件却显示并不包含该怎样解决

在使用vs过程中出现明明包含头文件却显示未包含头文件。 出现的原因: 以上图为例,这个文件中的.sln执行文件和下图中的.vcxproj 中的头文件路径包含可能存在不一致,因为外面的.sln文件运行和里面的文件有可能变更的时候保持不一致的情况,导致.sln在运行的时候发现配置问题,此时如果重新把该头文件移除重新添加一遍后,会发现在.vcxproj里该头文件的路径编写会发生改变 具体原因解释不知是否正确,但大致如此。 ...

qq_42317817的博客 4258

高通ISP模块全解析:从Raw到JPEG的18个关键处理步骤(附避坑指南)

本文全面解析高通ISP模块从Raw到JPEG的18个关键处理步骤,涵盖原始数据预处理、色彩科学处理链、画质增强与降噪等核心环节。通过实战调优经验,揭示ISP架构中的技术原理与工程实践要点,帮助开发者避免常见问题,提升移动影像处理质量。

weixin_30399155的博客 358

关于在线安装vs2017缺少头文件的解决办法

解决在线安装vs2017缺失头文件的问题

HEVC_LG的专栏 1万+

高精度磁力计RM3100 传感器LR振荡电路偏置电路分析

LR振荡器电路通过正向和反向偏置实现磁场测量。Sen-XY-f/Z-f传感器线圈作为电感元件构成LR弛张振荡电路,其振荡频率随磁场变化而改变。测量时,线圈一端接地,另一端交替通入正反向电流,通过两次偏置测量消除电路自身磁场干扰,仅保留外部磁场影响。MagI2C芯片通过高速时钟测量振荡次数和时间差,计算磁场强度。该设计具有抗干扰强、数字化输出和高分辨率等优势,是RM3100传感器高精度磁测量的核心原理。

bother3000的博客 1133

WPF的基础设施:XAML基础语法

XAML是WPF的核心标记语言,采用XML语法实现界面与逻辑分离。其基础语法包括:1)控件声明方式(特性语法和属性元素语法);2)x:Name与Name的区别(适用范围和编译行为);3)注释规范与代码折叠技巧;4)实用特性如属性继承、附加属性等。文章还提供了常见错误排查方法,建议通过实践练习掌握XAML开发技巧。全文系统介绍了XAML的核心语法与应用场景,是WPF开发者的基础学习指南。

Hare的博客 1755

关于VS2017缺少头文件的解决办法

VS2017此次更新之后,Windows SDK版本更新到10.0.15063.0,这之后我在新建项目编译程序时遇到缺少‘WinSock2.h’等头文件的提示。解决方法: 1、调出项目属性页,选择“VC++目录”。 2、“包含目录”中添加路径“C:\Program Files (x86)\Windows Kits\10\Include\10.0.14393.0\shared;C:\Program

qq_34362856的博客 4万+

【MATLAB代码】二维平面的TOA定位,GDOP(几何精度因子)和CRLB(克拉美罗下界)计算与输出

本文介绍了一个MATLAB程序,用于计算二维定位场景中的几何精度因子(GDOP)和克拉美罗下界(CRLB)。该程序针对单目标和四个锚点配置,通过网格扫描法计算空间各点的GDOP分布,并以等高线图可视化展示。程序还可计算特定位置的理论定位精度下限(CRLB),输出X/Y方向标准差和GDOP值。核心算法通过构建几何矩阵和费舍尔信息矩阵实现,考虑了测量误差影响,并处理了特殊位置情况。程序提供了完整的源代码和参数修改说明,适用于定位系统精度分析。

985工科博士毕业,专攻定位、导航和滤波等算法研究。从业10年,主要使用MATLAB 802

c语言头文件相互包含的后果,C语言头文件相互包含的问题

我深知前路风雨,但我依然微笑前行 ;)头文件相互包含的问题问题:头文件交叉包含是否会导致递归包含,导致编译出错?如果不会因为递归包含出错,那么交叉包含是不是完全没问题?1.1 头文件交叉包含是否会导致递归包含,导致编译出错?(无#ifndef)假若头文件a包含了头文件b、头文件b又包含了头文件a,那么在#include头文件a的时候,就可能会导致递归包含,从而导致编译出错;/* a.h */#in...

weixin_39959298的博客 2081

第三章-python基础语法

有C语言基础应该这样学 Python。

qq_46187594的博客 1175

YOLOv13优化Faster_Block:卷积(Partial Convolution)、多层感知机(MLP)结构和残差连接

Faster_Block 代表了现代深度学习中效率与性能平衡的一个典型案例。它通过部分卷积技术巧妙地减少了计算开销,同时通过精心设计的架构保持了强大的特征学习能力。这种设计思想对于移动端部署、实时应用和大规模模型训练都具有重要意义。 未来的发展方向可能包括更智能的动态分割策略、与新兴硬件的深度适配,以及与其他先进技术(如自注意力机制、神经架构搜索等)的结合。Faster_Block 的成功展示了在深度学习领域,创新往往来自于对问题本质的深刻理解和巧妙的工程实现。

FJN110的博客 427

2个办法解决头文件重复包含的问题

在一些大型项目中,各种头文件会相互包含,关系就显得错综复杂,同时由于文件的包含就是复制粘贴,那些重复包含的头文件就会使代码长度大大增加,那有没有什么办法解决这个问题呢?答案肯定是有的,这就涉及到条件编译了。

m0_74494481的博客 3655

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

头文件重复包含

一、头文件重复包含问题分析 1) 问题重现 举例说明。假设在某个C++ 头文件 或 源文件 中,包含了A.h和B.h两个头文件: #include “A.h” #include “B.h” 事实上,在头文件B.h中也包含了头文件A的引用,即: #include"A.h" 这样在编译这个文件时,因为文件包含了 A.h 这个头文件,编译器展开这个头文件,知道了 A 这个类的定义了,接着展开B.h头文件,而在B.h头文件中也包含了A.h,在此展开A.h,于是类A就重复定义了。 以上就是头文件重复包含问题的重现过程

weixin_39303983的博客 4022

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

C语言头文件相互包含的问题

头文件相互包含的问题 问题: 头文件交叉包含是否会导致递归包含,导致编译出错? 如果不会因为递归包含出错,那么交叉包含是不是完全没问题? 1.1 头文件交叉包含是否会导致递归包含,导致编译出错?(无#ifndef) 假若头文件a包含了头文件b、头文件b又包含了头文件a,那么在#include头文件a的时候,就可能会导致递归包含,从而导致编译出错; /* a.h */ #include &amp;amp;quot;b...

zyz394515661的博客 2万+

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

C++:头文件递归包含问题(互相包含问题)

目录引言初始版本头文件守卫递归包含会怎么样为什么会出错前置声明是什么如何解决递归包含问题参考 引言 最近正在疯狂补技术债,以及疯狂赶项目…大一大二摸的鱼终归是要还的,也奉劝大家少摸鱼,不然临近找工作可能就会像我一样焦虑。 在写C++项目中,碰到一个非常古怪的问题,当我像往常一样引入一个头文件时,vscode居然给我报红了(我在vscode中使用的是clangd插件): 当时就觉得非常震惊,我从未没碰到过只是include一个头文件,居然会报错的情况,当我以为是插件的问题,像往常一样mkdir build &

NiGo的博客 8848

C头文件相互包含

若hello.c文件中用到其他文件中的内容,比如yebo.h,则hello.h文件把用到的头文件yebo.h包含进来就可以了。正确的做法是:应该秉承.c文件对应的.h文件只包含头文件里用到的其它文件的头文件,任何非必须的.h文件不要包含;此时应该将其中一个头文件拆成两个头文件b1.h、b2.h,b1.h让原来的a.h包含;修改a.h、b.h两个文件,main.c文件内容不变。假若头文件a包含了头文件b、头文件b又包含了头文件a,那么在#include头文件a的时候,就可能会导致递归包含,从而导致编译出错;

weixin_42581177的博客 3455

c语言头文件包含嵌套问题和包含原则

a.h #include<stdio.h> #ifndef _A_H #define _A_H 只是解决头文件重复包含的问题的,但是头文件嵌套包含,就不代表不会出问题,就会关系错综复杂,出现标识符未定义,重定义等错误。(具体的错误和举例,自己百度搜索吧) 所以C语言头文件包含原则如下:(头文件嵌套的话,会造成包含很多不必要的头文件,会造成编译速度变慢) 文件中实现变量、函数的定义...

biao2488890051的博客 6699

ZT 头文件包含其实是一想很烦琐的工作 第一个原则应该是,如果可以不包含头文件...

当出现访问类的函数或者需要确定类大小的时候,才需要用头文件(使用其类定义) http://blog.youkuaiyun.com/clever101/article/details/4751717 看到这个警告,我想你一定悟到了什么。下面我说说我的结论:类的前置声明和包含头文件的区别在于类的前置声明是告诉编译器有这种类型,但是它没有告诉编译器这种类型的大小、成员函数和数据成员,而包含头...

weixin_30755709的博客 168

解决C++中两个类的头文件互相包含问题

c++常见问题

weixin_44216359的博客 4546

gcc包含头文件的一些总结

要包含其他头文件,我们要使用#include指令。我们知道,包含头文件有两种写法,分别是: #include <stdio.h> #include "stdio.h" <>和""分别表示搜索位置的方式。VC中,<>表示先从系统目录下搜索,如果没有搜索到,再从当前目录搜索。""表示先从当前目录搜索,如果没有搜索到,再到系统目录搜索。两者都没有搜索到,回到...

透明 3128

Linux C 头文件互相包含问题

头文件相互包含的问题 问题: 头文件交叉包含是否会导致递归包含,导致编译出错? 如果不会因为递归包含出错,那么交叉包含是不是完全没问题? 1.1 头文件交叉包含是否会导致递归包含,导致编译出错?(无#ifndef)   假若头文件a包含了头文件b、头文件b又包含了头文件a,那么在#include头文件a的时候,就可能会导致递归包含,从而导致编译出错; /* a.h */ #include "b...

希哈科技 1121
上一篇: linux C 主线成与子线程参数传递
下一篇: linux c 改变控制台输出字体颜色
MrBugYang
博客等级 码龄18年 21粉丝 35原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值