※ [本文轉錄自 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幹快笑死,,