vs c++如何自动删除没用的#include
658 26
[1 楼] metaldz [泡菜]
21-11-13 00:34
自学c++ 一边研究一边写代码 前边加了好多#include  程序已完成 但有些#include功能后来不用了  vs能不能自动把没用的#include找出并删除 本帖最后由 metaldz 于 2021-11-13 00:38 编辑
[27 楼] makesoft [泡菜]
21-11-14 07:37
做了那么多年程序,自然知道compile/link/build/rebuild all之间的区别了,你注释了有用的头文件,使用rebuild all不报错那这样的编译器自然可以扔了。
工程文件大,编译很耗时,所以存在预编译的问题,像楼主后面跟帖的几K或者几十K这种规模程序,都使用工程重构或者全部编译链接好了。
发布自 安卓客户端
[26 楼] metaldz [泡菜]
21-11-13 22:04
太没劲了 发表于 2021-11-13 21:52
go 就强制去掉 import,感觉挺烦人的,多整些多余的 include 感觉也没啥,还是 c/c++ 自由,go 那个有点多管闲事的感觉,


看过一个澡堂恶搞视频 c++进澡堂之后 其他语言都萎了,c进澡堂c++萎了,汇编语言进澡堂 c c++萎了,机器码进澡堂汇编和c c++都萎了

看过这个视频之后有点后悔学c++ 打算换成c  但手头只找到一个c++教程 先感受一下再换

https://www.bilibili.com/video/av99511323
[25 楼] 太没劲了 [陈年泡菜]
21-11-13 21:52
go 就强制去掉 import,感觉挺烦人的,多整些多余的 include 感觉也没啥,还是 c/c++ 自由,go 那个有点多管闲事的感觉,
[24 楼] metaldz [泡菜]
21-11-13 21:16
黄黑黄 发表于 2021-11-13 21:01
VS C++ 刚学三天没关系,俺也用的不多,好在编程的思想是相通的,新东西很快就上手了

16年还好,太老了就不行了,比如俺85年开始的编程,90年开始正式做码农,经验固然有一点儿,但学新东西明显不如年轻时候快了


我1991年开始玩编程  2005年开始重度利用编程,但我不靠编程吃饭,我写程序是为了自己玩游戏,我自己给自己写外挂 现在学c++是因为之前的玩的lua vbs无法满足我需求了,想学学这种更猛的程序 开开眼 本帖最后由 metaldz 于 2021-11-13 21:35 编辑
[23 楼] 黄黑黄 [资深泡菜]
21-11-13 21:01
metaldz 发表于 2021-11-13 20:52
我编程史是16年   虽然没统计但我写过的代码文本长度50m应该有  你说的这个我明白~~~~

但vs c++我刚学三天~~~




VS C++ 刚学三天没关系,俺也用的不多,好在编程的思想是相通的,新东西很快就上手了

16年还好,太老了就不行了,比如俺85年开始的编程,90年开始正式做码农,经验固然有一点儿,但学新东西明显不如年轻时候快了


[22 楼] metaldz [泡菜]
21-11-13 20:52
黄黑黄 发表于 2021-11-13 20:45
不是注释多了有什么错误,而是要养成写“自注释”代码的习惯,写出来的代码可读性高,一看就懂不需要注释,只在必须靠注释才能不费脑筋就了解代码意图的时候才写


我编程史是16年   虽然没统计但我写过的代码文本长度50m应该有  你说的这个我明白~~~~

但vs c++我刚学三天~~~ 本帖最后由 metaldz 于 2021-11-13 20:54 编辑
[21 楼] 黄黑黄 [资深泡菜]
21-11-13 20:45
metaldz 发表于 2021-11-13 20:29
注释写多了有什么错误?有什么缺点?


不是注释多了有什么错误,而是要养成写“自注释”代码的习惯,写出来的代码可读性高,一看就懂不需要注释,只在必须靠注释才能不费脑筋就了解代码意图的时候才写 本帖最后由 黄黑黄 于 2021-11-13 20:47 编辑
[20 楼] metaldz [泡菜]
21-11-13 20:29
lhy000 发表于 2021-11-13 20:27
注释……培养注释习惯确实好,但按你的说法,完美注释 注释不嫌多,这肯定是错误的。注释只能给你一些简单的帮助。
……反正这些事,你写多了自己也就知道了。


注释写多了有什么错误?有什么缺点?
[19 楼] lhy000 [禁言中]
21-11-13 20:27
metaldz 发表于 2021-11-13 20:16
如果有错百分之百指出错误 这个简单

就怕没错    没错不代表 对  只有 对才代表对   是否对 光看是否“没错”一个指标还不行  是否对需要检查 和反复检验  这个检查可就麻烦了

我上边说的 不光是语言语法编译上的错  还包括整个程序是否按照你预设目的工作 上的 错  这种错有时候是完全没有任何语法 错误迹象的

注释……培养注释习惯确实好,但按你的说法,完美注释 注释不嫌多,这肯定是错误的。注释只能给你一些简单的帮助。
……反正这些事,你写多了自己也就知道了。
[18 楼] metaldz [泡菜]
21-11-13 20:16
lhy000 发表于 2021-11-13 19:53
首先编译一次肯定能发现是否注释/删错了,但先看看ide是否报错也没毛病。
并且接近于100%情况下ide还真能搞定。


如果有错百分之百指出错误 这个简单

就怕没错    没错不代表 对  只有 对才代表对   是否“对” 光看是否“没错”一个指标还不行  是否对需要检查 和反复检验  这个检查可就麻烦了

我上边说的 不光是语言语法编译上的错  还包括整个程序是否按照你预设目的工作 上的 错  这种错有时候是完全没有任何语法 错误迹象的 本帖最后由 metaldz 于 2021-11-13 20:28 编辑
[17 楼] lhy000 [禁言中]
21-11-13 20:03
metaldz 发表于 2021-11-13 19:32
我偏向你的观点,一楼让我手动删 别嫌麻烦,我就尝试手动试试,通过是否报错来判断, 不严谨,因为代码是复杂的 有一丝没想到的情形就有可能误删 东西,你删了某些东西 ide不报错 运行结果乍一看也没啥问题,但事实上有不小的概率有隐患

所以我题目中的我要求 过于理想了,“自动删除没用的include”不是像我想象的那么简单的功能,如果绝对稳妥简单ide就会加入这个功能, 这也说明 为什么我网上百度了半天 也没有很清晰的解决办法,有一个回答说通过某个工具可以做到,但紧跟着就搜到了用过此工具的人发现bug的牢骚贴

所以我预测,我首帖诉求,不是那么容易能达到的 需要付出意想不到的一定概率的风险

只有一个办法 就是写程序的时候 完美注释  注释不嫌多。一定要多注释 让之后回看代码时的自己能100%看懂, 才敢,删东西

idea会在其它语言类似情况下,把用不到的类似于include的语句变灰,vs可能要追求100%的正确性,没这么做。
[16 楼] lhy000 [禁言中]
21-11-13 19:53
metaldz 发表于 2021-11-13 19:32
我偏向你的观点,一楼让我手动删 别嫌麻烦,我就尝试手动试试,通过是否报错来判断, 不严谨,因为代码是复杂的 有一丝没想到的情形就有可能误删 东西,你删了某些东西 ide不报错 运行结果乍一看也没啥问题,但事实上有不小的概率有隐患

所以我题目中的我要求 过于理想了,“自动删除没用的include”不是像我想象的那么简单的功能,如果绝对稳妥简单ide就会加入这个功能, 这也说明 为什么我网上百度了半天 也没有很清晰的解决办法,有一个回答说通过某个工具可以做到,但紧跟着就搜到了用过此工具的人发现bug的牢骚贴

所以我预测,我首帖诉求,不是那么容易能达到的 需要付出意想不到的一定概率的风险

只有一个办法 就是写程序的时候 完美注释  注释不嫌多。一定要多注释 让之后回看代码时的自己能100%看懂, 才敢,删东西

首先编译一次肯定能发现是否注释/删错了,但先看看ide是否报错也没毛病。
并且接近于100%情况下ide还真能搞定。
以下内容由 lhy000 于 2021-11-13 20:16 补充
ide自动检查错误应该是非常非常靠谱的。
忽略我的发言,我是下意识想的太多,实际上这些想多的东西基本没什么参考价值。
[15 楼] lhy000 [禁言中]
21-11-13 19:49
黄黑黄 发表于 2021-11-13 19:00
现在的 IDE 都提供实时的代码感知、补全等功能,少了 #include 这种小儿科的事情怎么可能不报错

相信ide倒也没错。
几乎没人实战中用自己创建的模板,最多用用库中的模板。ide确实很容易搞定。
[14 楼] metaldz [泡菜]
21-11-13 19:32
lhy000 发表于 2021-11-13 18:05
比如说宏展开,只有编译的时候才能发现错误,编辑的时候让ide来干这事,恐怕要相当于整个工程编译一次的时间,太长。

模板,这东西也大致相当于宏,它的错误,也得在用到模板的地方展开才能知道有没有错误。


我偏向你的观点,一楼让我手动删 别嫌麻烦,我就尝试手动试试,通过是否报错来判断, 不严谨,因为代码是复杂的 有一丝没想到的情形就有可能误删 东西,你删了某些东西 ide不报错 运行结果乍一看也没啥问题,但事实上有不小的概率有隐患

所以我题目中的我要求 过于理想了,“自动删除没用的include”不是像我想象的那么简单的功能,如果绝对稳妥简单ide就会加入这个功能, 这也说明 为什么我网上百度了半天 也没有很清晰的解决办法,有一个回答说通过某个工具可以做到,但紧跟着就搜到了用过此工具的人发现bug的牢骚贴

所以我预测,我首帖诉求,不是那么容易能达到的 需要付出意想不到的一定概率的风险

只有一个办法 就是写程序的时候 完美注释  注释不嫌多。一定要多注释 让之后回看代码时的自己能100%看懂, 才敢,删东西 本帖最后由 metaldz 于 2021-11-13 19:34 编辑
[13 楼] 黄黑黄 [资深泡菜]
21-11-13 19:18
极端一点,如果在楼主的#include的文件(比如stdio.h)中通过别的编辑器加入#define A int,它会如何反应呢?

在limits.h中加入#undef A,又会如何反应呢?


你所说的极端情况,正常写代码的不会这么干的,搞破坏的除外

俺试了一下,这种极端情况下,VS 不会实时感知这些标准库中的头文件的变化,但是每次保存源文件的时候,还是会做检查并发现这些变化的 本帖最后由 黄黑黄 于 2021-11-13 19:19 编辑
[12 楼] 黄黑黄 [资深泡菜]
21-11-13 19:00
lhy000 发表于 2021-11-13 18:57
验证ide是否做预编译这个事,恐怕是个很麻烦的事情。
比如还得看,会不会本来是正确的,结果报错了。
比如有#define A int,是否报错。
还得弄一些复杂的宏或者模板,看它如何反应。


就楼主这种情况,把有用的 #include 语句注释掉,一定会报错的

现在的 IDE 都提供实时的代码感知、补全等功能,少了 #include 这种小儿科的事情怎么可能不报错
[11 楼] lhy000 [禁言中]
21-11-13 18:57
黄黑黄 发表于 2021-11-13 18:35
楼主首帖这种情况,假如他的程序中用到了 A f 来定义一个变量,但是却没有 #include 包含对应的定义 #define A int 的头文件的话,至少俺俺常用的VS、VS Code、Keil MDK 这几种 IDE 中是一定会报错的

验证ide是否做预编译这个事,恐怕是个很麻烦的事情。
比如还得看,会不会本来是正确的,结果报错了。
比如有#define A int,是否报错。
还得弄一些复杂的宏或者模板,看它如何反应。

以下内容由 lhy000 于 2021-11-13 18:59 补充
极端一点,如果在楼主的#include的文件(比如stdio.h)中通过别的编辑器加入#define A int,它会如何反应呢?
以下内容由 lhy000 于 2021-11-13 19:01 补充
在limits.h中加入#undef A,又会如何反应呢?
[10 楼] 黄黑黄 [资深泡菜]
21-11-13 18:35
lhy000 发表于 2021-11-13 18:17
#define A int

A f;

把A替换成int后,才能看出来是否有语法错误。
复杂的宏,宏调用宏,都得替换后才能继续编译。

同样,模板也得替换后才能看出来是否有语法错误。


楼主首帖这种情况,假如他的程序中用到了 A f 来定义一个变量,但是却没有 #include 包含对应的定义 #define A int 的头文件的话,至少俺俺常用的VS、VS Code、Keil MDK 这几种 IDE 中是一定会报错的
[9 楼] lhy000 [禁言中]
21-11-13 18:17
黄黑黄 发表于 2021-11-13 18:12
能举个具体的例子吗?简单的就行

#define A int

A f;

把A替换成int后,才能看出来是否有语法错误。
复杂的宏,宏调用宏,都得替换后才能继续编译。

同样,模板也得替换后才能看出来是否有语法错误。
[8 楼] 黄黑黄 [资深泡菜]
21-11-13 18:12
lhy000 发表于 2021-11-13 18:05
比如说宏展开,只有编译的时候才能发现错误,编辑的时候让ide来干这事,恐怕要相当于整个工程编译一次的时间,太长。

模板,这东西也大致相当于宏,它的错误,也得在用到模板的地方展开才能知道有没有错误。


能举个具体的例子吗?简单的就行
[7 楼] lhy000 [禁言中]
21-11-13 18:05
黄黑黄 发表于 2021-11-13 18:01
比如说?

比如说宏展开,只有编译的时候才能发现错误,编辑的时候让ide来干这事,恐怕要相当于整个工程编译一次的时间,太长。
以下内容由 lhy000 于 2021-11-13 18:09 补充
模板,这东西也大致相当于宏,它的错误,也得在用到模板的地方展开才能知道有没有错误。
[6 楼] 黄黑黄 [资深泡菜]
21-11-13 18:01
lhy000 发表于 2021-11-13 17:50
c++的那些预编译指令,ide搞不定。


比如说?
[5 楼] lhy000 [禁言中]
21-11-13 17:50
黄黑黄 发表于 2021-11-13 15:45
现在的IDE不需要编译就应该发现错误了吧 ......

c++的那些预编译指令,ide搞不定。
[4 楼] 黄黑黄 [资深泡菜]
21-11-13 15:45
makesoft 发表于 2021-11-13 06:24
注释//,编译试试,出错再恢复,不费啥事的。
另外,没用的头文件,好像也不增加什么编译最终的代码长度和效率。


现在的IDE不需要编译就应该发现错误了吧 ......
[3 楼] metaldz [泡菜]
21-11-13 12:52
makesoft 发表于 2021-11-13 06:24
注释//,编译试试,出错再恢复,不费啥事的。
另外,没用的头文件,好像也不增加什么编译最终的代码长度和效率。


”另外,没用的头文件,好像也不增加什么编译最终的代码长度和效率。“ 红字,你这句话我做了个试验
多了没用的include比不多的 最终exe文件大了
本帖最后由 metaldz 于 2021-11-13 12:52 编辑
[2 楼] makesoft [泡菜]
21-11-13 06:24
注释//,编译试试,出错再恢复,不费啥事的。
另外,没用的头文件,好像也不增加什么编译最终的代码长度和效率。
编辑于:2021-11-13 06:24:55