C_and_CPP 板


LINE

※ [本文转录自 Programming 看板 #1QuouicF ] 作者: DIE755127 () 看板: Programming 标题: [问题] 请问C介面跟实作分开的作法 时间: Fri Apr 27 22:05:30 2018 通常一般的习惯a.c会去include a.h a.c是实作内容 a.h是介面宣告 b.c只需要include a.h就可以使用a的function 但实际上把a.c include a.h的内容拿掉 编译过程link也不会发生问题(虽然这样看起来a.c跟a.h就没有直接关连) 当然如果a.h内还有定义一些struct或常数会被a.c用到 include a.h就是必须的 不过在不考虑上述的情况下 是否a.c要不要去include a.h只剩下coding习惯的问题? 编译过程上没有任何差别? 第二个问题是 去include一个.c档是绝对必须避免的吗? 有甚麽情况下是必须要这样做?(因为有看到有人这样写 但觉得不太合常理) --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 1.163.233.122
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Programming/M.1524837932.A.98F.html



※ 发信站: 批踢踢实业坊(ptt.cc)
※ 转录者: DIE755127 (1.163.233.122), 04/27/2018 22:10:39
1F:推 KanzakiHAria: 可以先宣告原型再实作 04/27 22:19
2F:→ KanzakiHAria: 每个binary只能有一组宣告+实作 04/27 22:20
3F:→ KanzakiHAria: 如果a.c编译成a.o 有没有include a.h就是差原型宣告 04/27 22:21
4F:→ KanzakiHAria: 如果include a.c 之後只要这个区块被include两次 04/27 22:22
5F:→ KanzakiHAria: 就会变成一个binary里面有两份实作 自然会编译失败 04/27 22:23
6F:推 KanzakiHAria: 未include a.h的a.o会失败的情况是 如果改a.h原型 04/27 22:26
7F:→ KanzakiHAria: 因为a.c不知道a.h有变 之後link自然会失败 04/27 22:27
8F:→ KanzakiHAria: 为什麽要用各式各样可能会炸的方法写程式咧? 04/27 22:28
9F:→ DIE755127: 感谢回应 我自己不会这样写 只是trace别人的code看到 04/27 22:32
10F:→ DIE755127: 不过介面改变 有没有include变成一个是compile出错 04/27 22:43
11F:→ DIE755127: 另一个是link出错 不晓得这样理解对吗 04/27 22:43
12F:→ KanzakiHAria: 未来改a.h的时候 因为a.c不会跟上 所以之後对不上 04/27 22:45
13F:→ KanzakiHAria: 静态连结是compiler时期找不到实作 04/27 22:46
14F:→ KanzakiHAria: 动态连结是执行时期炸掉 04/27 22:47
15F:→ DIE755127: 不过就结果来说都是会出问题 好像跟include的关系不大? 04/27 22:51
16F:→ DIE755127: 我自己认知是觉得比较容易影响trace code的直觉性 04/27 22:53
17F:→ KanzakiHAria: 只要能执行就都是合法语法阿 问题是扩充可读维护性 04/27 22:59
18F:→ DIE755127: 会这样问是看到一个c档没有include任何header只有一堆f 04/27 23:32
19F:→ DIE755127: unction 但也不是static function 就搞不太清楚这个c 04/27 23:32
20F:→ DIE755127: 档的目的是什麽 结果别的c档靠着 include分离的header( 04/27 23:32
21F:→ DIE755127: 介面一样)去link他 04/27 23:32
22F:推 Bencrie: 全都是 static function 才奇怪吧 XD 04/27 23:34
23F:→ DIE755127: 对啦 至少要有一个不是 其他static就是为他服务这样 04/27 23:37
24F:推 Bencrie: 没 include 就 call 你会遇到 implicit declaration of 04/27 23:40
25F:→ Bencrie: function。然後堆叠有机会爆炸 04/27 23:40
26F:→ DIE755127: 我看到另个写法是a.c a.h没关联 b.c去include a.c&a.h 04/27 23:52
27F:→ DIE755127: 这样只需要编译b.o 其他要使用的人include a.h 04/27 23:53
28F:→ DIE755127: 这种写法是不是也不太好? 04/27 23:54
29F:→ james732: a.h其实不是给a.c使用,而是给其他需要a.c的人使用的 04/28 01:32
30F:推 Bencrie: include .c 就 redefinition 04/28 02:12
31F:推 enonrick: 1.不include 自己的header 就是烂习惯,不讨论。2.可以 04/28 09:40
32F:→ enonrick: 的话应避免 include 别的header ->yes , 能用 forward d 04/28 09:40
33F:→ enonrick: eclaration 就能解的就不要include 04/28 09:40







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:BabyMother站内搜寻

TOP