※ [本文转录自 Gossiping 看板 #1Pfw8CCA ]
作者: reinforce15 (可鲁贝洛斯) 看板: Gossiping
标题: Re: [问卦] 宁宁鸡写程式时是用space还是tab缩排
时间: Thu Aug 31 13:43:38 2017
※ 引述《justwe5566 (杰士塔纱路的老公)》之铭言:
: 乳提
: 可爱的宁宁鸡
: http://i.imgur.com/P5c7HIF.jpg
: 最近开始学写程式
: 不知道宁宁鸡缩排都用space还是tab
: 好想知道喔
: U咪U宁宁鸡是space派还是tab派的八卦?
你好 我好 各位姆咪好
我是小光 http://i.imgur.com/1fhF9x3.jpg
我觉得她应该是用space吧
不过本光还是喜欢用快捷键一键缩排 赞
话说第二季好好看喔 那只猫也好可爱
第二季 第09分第34秒处
http://i.imgur.com/35hXCjk.png
上图是宁宁原本的code 把他转OCR
//
void DestructibleActor::ReceiveDamage(float sourceDamage)
{
//
auto resolvedDamage = sourceDamage;
for (const auto& debuf:m_debufs)
{
resolvedDamage = debuf.ApplyToDamage(resolvedDamage);
m_currentHealth -= resolvedDamage
if (m_currentHealth <= 0.f)
{
m_currentHealth = 0.f;
DestroyMe();
}
}
}
而且宁宁说执行时会卡住
好 让我们来看看问题出在哪
首先
请各位姆咪们先看到第37行 DestroyMe()
有没有发现? 这个DestroyMe()只有在血条小于等于0时才会被call
再来请姆咪们看到第34行这里
也就是说 如果当 m_currentHealth 小于等于 0.f时
会一直是true的状态 而一直去重复执行DestroyMe()
但又因DestroyMe()之前已经被call过了
可能会造成内存没有东西可以让DestroyMe()消除
所以内存有可能会被违法存取
而导致系统不稳 最终当机
本光想到的解法是把 } 号移到这里
像这样
//
void DestructibleActor::ReceiveDamage(float sourceDamage)
{
//
auto resolvedDamage = sourceDamage;
for (const auto& debuf:m_debufs)
{
resolvedDamage = debuf.ApplyToDamage(resolvedDamage);
}
m_currentHealth -= resolvedDamage
if (m_currentHealth <= 0.f)
{
m_currentHealth = 0.f;
DestroyMe();
}
}
如此一来 既能把第30行的for 与第34行的if分离开来
不会重复去DestroyMe
又能把Damage丢到循环外
不过有点疑问的是...
这样写不会在编译时就跳出警告 或就直接出错吗?
我在猜啦 可能造成游戏卡死的原因不是只有这个
其他地方可能也有logic上的问题
还有宁宁的compiler左侧那栏我怎么看都没References
这样没问题吗
啊对 海子那个应该可以用Qt来做到
只是没她的source code
作者:
canblow (可吹)
2016-08-31 13:45:00肥宅的时间真多
作者:
SuperUp (( ̄▽ ̄#)﹏﹏)
2016-08-31 13:45:00大哥 今天天气很好耶 不考虑出个门吗?
作者:
limoncool (å„„è¼‰é‡‘åŸŽæ¦ Limoncool)
2016-08-31 13:45:00文组的看不懂
作者:
brad84622 (brad84622)
2016-08-31 13:52:00臭
作者:
surimodo (好吃棉花糖)
2017-08-31 14:55:00用tab有些语言有机率出错 学校都是教space
作者:
siscon (laisan)
2017-08-31 14:55:00谁用tab缩排 我跟他拼命
作者: wryyyyyyyy (蜥蜴长老) 2017-08-31 14:56:00
文组看不懂QQ
作者:
CP64 (( ̄▽ ̄#)﹏﹏)
2017-08-31 14:57:00平常都用 2-space 的 (是说这边 break 出来再 Destroy 就好?
linux kernel 都用 tab 缩排,快去骂 Torvalds
作者:
OppOops (Oops)
2017-08-31 14:58:00你这样是算错的吧, resolvedDamage只会算到第一种
作者:
OppOops (Oops)
2017-08-31 14:59:00不然干嘛写for循环最后一种
作者:
Arminius (奇怪的欧吉桑)
2017-08-31 15:00:00哪个学校那么无聊教这个。用哪种是要配合所在团队/专案
作者:
Arminius (奇怪的欧吉桑)
2017-08-31 15:01:00的coding standard, 整个专案要一致, 个人不能随意乱弄
作者:
CP64 (( ̄▽ ̄#)﹏﹏)
2017-08-31 15:01:00不过也有看过说因为 tab size 可以用编辑器调所以用 tab
作者: a840901 (苍天不太妙) 2017-08-31 15:01:00
快推不然别人以为我看不懂
作者:
arrenwu (键盘的战鬼)
2017-08-31 15:03:00宁宁鸡好可爱 >D<我记得 Python 缩排一定要用 Tab 吧C++ 用什么都没差的样子
作者:
Zero0910 (みくに最高≧▽≦)
2017-08-31 15:05:00VC可以设定要tab还是space 我个人是比较喜欢tab
作者:
CP64 (( ̄▽ ̄#)﹏﹏)
2017-08-31 15:05:00python 不用喔 记得只要一致就好了Makefile 是一定要 tab 啦
作者:
Zero0910 (みくに最高≧▽≦)
2017-08-31 15:08:00妈的谁写python再给我用tab的我还不砍死你PEP他妈给我罚抄一千遍
我写 python 就是用 tab 在缩排 der,PEP 是什么可以吃吗
作者:
seaEPC (没看见,我没看见 >_<)
2017-08-31 15:17:00Tab vs. space 永恒的战争 tab go die
作者:
ivstitia (MakiChanMyWife)
2017-08-31 15:18:00推
作者: dieorrun (Tide) 2017-08-31 15:19:00
我都这行用tab下一行就用space 每个人都想杀我
明明editor调一下,tab就可以自动space了,就是一堆人不用。
作者:
emptie ([ ])
2017-08-31 15:23:00现在的IDE大部分都会把tab换成space吧 我记得python只吃的是space吧
作者:
seaEPC (没看见,我没看见 >_<)
2017-08-31 15:25:00PEP8只说偏好space,你要用tab还是可以吧,3不能混用就是
不过有时候忽然想到程式可能这样改又不想开complier
作者:
genesic (嗯?)
2017-08-31 15:28:00如果要这样改的话,我推荐DestroyMe之后就直接return了
作者:
genesic (嗯?)
2017-08-31 15:29:00小于0后也不用浪费时间去算后面的debuff
作者:
notsmall (NotSmall)
2017-08-31 15:33:00把tab改成space啊 搬程式完全不用考虑问题
作者:
ts1993 (komi1111)
2017-08-31 15:34:00超歪WWW
作者:
spfy (spfy)
2017-08-31 15:37:00C#是世界上最好的语言 话说到这边 谁赞成 谁反对
作者:
gofee (撞墙的青蛙)
2017-08-31 15:40:00c#难用死了
作者:
wuyiulin (龙破坏剑士-巴斯达布雷达)
2017-08-31 15:41:00C#难用 蛤?开战啦
作者:
arrenwu (键盘的战鬼)
2017-08-31 15:46:00C# 有 Visual Studio 超强!
作者:
shiow1026 (CannonDick)
2017-08-31 15:47:00C C# C++ Python 站出来
作者:
corlos (ナニソレ、イミワカンナ)
2017-08-31 15:47:00文组的喔
作者: howder5566 (好der5566) 2017-08-31 15:56:00
看到Qt感动落泪耶,没想到有人知道Qt
虽然后来都用C30 comlier或直接写机械语言了反正要烧到芯片里测试能不能用方便就好 记事本改都ok因为用记事本最省内存 跑的最快
tab output用4 space飘过 js用2 space
作者:
seaEPC (没看见,我没看见 >_<)
2017-08-31 16:02:00语言好不好用是看用在哪 以及谁在用 _(:3
作者:
hms5232 (未)
2017-08-31 16:04:00我用TAB我骄傲
作者:
Zero0910 (みくに最高≧▽≦)
2017-08-31 16:08:00对齐用到8格不会被巴头吗
作者:
linzero (【林】)
2017-08-31 16:08:00不同编辑软件,Tab跳的格数不一样
作者:
seaEPC (没看见,我没看见 >_<)
2017-08-31 16:20:00很多软件默认是8格啊,譬如说vim,至于为啥这样也是有历史因素的,可以去翻一下wiki对tab的介绍
作者:
sdd5426 (★黑白小羊☆)
2017-08-31 16:27:00讲得还挺有可能的 因为动画跳出的错误讯息是内存错误
作者:
linzero (【林】)
2017-08-31 16:27:00有的软件,按tab不储成tab,而是直接帮你转成4或8格空白
作者:
tLuesuGi (上杉不识庵真光谦信)
2017-08-31 16:32:00我文组看不懂 只好推了
作者:
erik777 (水树奈奈红白登场!!!)
2017-08-31 16:38:00C#都自动格式化喔 谁管tab还space
作者:
CP64 (( ̄▽ ̄#)﹏﹏)
2017-08-31 16:40:00记得动画里就有提到问题在多杀了几次啊 ' A')
作者:
stkoso (Asperger)
2017-08-31 16:54:00战!
作者: gohpx (懒得想) 2017-08-31 17:07:00
IDE选的好 tab space没烦恼
作者:
kaltu (ka)
2017-08-31 17:09:00只接受 soft tab,要用 tab 就用,但程式必须存成 space以为全世界都有义务知道你的 tab 在你的机器上是设定等于几个 space 喔,白眼tab 只能说键盘上的按键,不能是进 code 的字符,结案。敢让我看到 code 出现 \t 一定退会,换个地方看就长不一样你不烦别人会抓狂
作者:
oToToT (å±å©)
2017-08-31 17:25:00改战空白格数
作者:
gwhmwiki (现在说书人)
2017-08-31 17:33:00文组只看日富美
有人不知道vim跟pycharm都能tab转space的ㄇ??
作者:
bitcch (必可取)
2017-08-31 18:22:00destroy后加一个break也可以
作者: lavign (一悬命部队) 2017-08-31 19:26:00
这里的tab是指\t吧
下一篇会战大括号位置吗?我先说我是 Allman 派 der
作者:
toyog (toyog)
2017-08-31 21:37:00干快笑死,,