pbootcms网站模板|日韩1区2区|织梦模板||网站源码|日韩1区2区|jquery建站特效-html5模板网

C 或 C++ 中好的 goto 示例

Examples of good gotos in C or C++(C 或 C++ 中好的 goto 示例)
本文介紹了C 或 C++ 中好的 goto 示例的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧!

問題描述

在本主題中,我們將研究 goto 在 C 或 C++ 中的良好使用示例.它的靈感來自一個人們投票贊成的答案,因為他們以為我在開玩笑.

In this thread, we look at examples of good uses of goto in C or C++. It's inspired by an answer which people voted up because they thought I was joking.

總結(jié)(標(biāo)簽從原來的改變使意圖更加清晰):

Summary (label changed from original to make intent even clearer):

infinite_loop:

    // code goes here

goto infinite_loop;

為什么它比替代方案更好:

Why it's better than the alternatives:

  • 這是具體的.goto 是語言結(jié)構(gòu)導(dǎo)致無條件分支.備擇方案依賴于使用結(jié)構(gòu)支持條件分支,帶有退化的永遠(yuǎn)真實條件.
  • 標(biāo)簽記錄意圖沒有額外的評論.
  • 讀者無需掃描早期 break 的干預(yù)代碼(雖然仍然有可能無原則的黑客來模擬continue 使用早期的 goto).
  • It's specific. goto is the language construct which causes an unconditional branch. Alternatives depend on using structures supporting conditional branches, with a degenerate always-true condition.
  • The label documents the intent without extra comments.
  • The reader doesn't have to scan the intervening code for early breaks (although it's still possible for an unprincipled hacker to simulate continue with an early goto).

規(guī)則:

  • 假裝沒有恐懼癥贏.據(jù)了解,上述不能在實際代碼中使用,因為它違背了既定的習(xí)語.
  • 假設(shè)我們都聽說過后藤被認(rèn)為有害"并知道goto 可以用來寫意大利面代碼.
  • 如果你不同意一個例子,批評它的技術(shù)價值獨自一人('因為人們不喜歡goto' 不是技術(shù)原因).

讓我們看看我們是否可以像大人一樣談?wù)撨@個.

Let's see if we can talk about this like grown ups.

編輯

這個問題現(xiàn)在似乎已經(jīng)結(jié)束了.它產(chǎn)生了一些高質(zhì)量的答案.謝謝大家,尤其是那些認(rèn)真對待我的小循環(huán)示例的人.大多數(shù)懷疑論者擔(dān)心由于缺少塊作用域.正如@quinmars 在評論中指出的那樣,您始終可以在循環(huán)體.我注意到 for(;;)while(true) 沒有給你大括號免費(并且省略它們會導(dǎo)致令人煩惱的錯誤).反正我不會再浪費了你在這件小事上的腦力 - 我可以忍受無害和慣用的 for(;;)while(true)(如果我想保持我的工作).

This question seems finished now. It generated some high quality answers. Thanks to everyone, especially those who took my little loop example seriously. Most skeptics were concerned by the lack of block scope. As @quinmars pointed out in a comment, you can always put braces around the loop body. I note in passing that for(;;) and while(true) don't give you the braces for free either (and omitting them can cause vexing bugs). Anyway, I won't waste any more of your brain power on this trifle - I can live with the harmless and idiomatic for(;;) and while(true) (just as well if I want to keep my job).

考慮到其他回復(fù),我看到很多人都將 goto 視為您一直以來的事情必須以另一種方式重寫.當(dāng)然,您可以通過引入循環(huán)來避免 goto,一個額外的標(biāo)志,一堆嵌套的 ifs,或者其他什么,但為什么不考慮 goto 是否是也許是這項工作的最佳工具?換句話說,為了避免將內(nèi)置語言功能用于其預(yù)期目的,人們準(zhǔn)備忍受多少丑陋?我的看法是甚至增加一面旗幟也付出了過高的代價.我喜歡我的變量來表示事物問題或解決方案域.'僅僅為了避免 goto' 并不能解決問題.

Considering the other responses, I see that many people view goto as something you always have to rewrite in another way. Of course you can avoid a goto by introducing a loop, an extra flag, a stack of nested ifs, or whatever, but why not consider whether goto is perhaps the best tool for the job? Put another way, how much ugliness are people prepared to endure to avoid using a built-in language feature for its intended purpose? My take is that even adding a flag is too high a price to pay. I like my variables to represent things in the problem or solution domains. 'Solely to avoid a goto' doesn't cut it.

我會接受第一個答案,它給出了分支到清理塊的 C 模式.IMO,這當(dāng)然是所有已發(fā)布答案的 goto 的最強案例如果你用仇恨者為了避免它而必須經(jīng)歷的扭曲來衡量它.

I'll accept the first answer which gave the C pattern for branching to a cleanup block. IMO, this makes the strongest case for a goto of all the posted answers, certainly if you measure it by the contortions a hater has to go through to avoid it.

推薦答案

這是我聽說人們使用的一個技巧.不過我從來沒有在野外見過它.它只適用于 C,因為 C++ 有 RAII 可以更慣用地做到這一點.

Heres one trick I've heard of people using. I've never seen it in the wild though. And it only applies to C because C++ has RAII to do this more idiomatically.

void foo()
{
    if (!doA())
        goto exit;
    if (!doB())
        goto cleanupA;
    if (!doC())
        goto cleanupB;

    /* everything has succeeded */
    return;

cleanupB:
    undoB();
cleanupA:
    undoA();
exit:
    return;
}

這篇關(guān)于C 或 C++ 中好的 goto 示例的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網(wǎng)!

【網(wǎng)站聲明】本站部分內(nèi)容來源于互聯(lián)網(wǎng),旨在幫助大家更快的解決問題,如果有圖片或者內(nèi)容侵犯了您的權(quán)益,請聯(lián)系我們刪除處理,感謝您的支持!

相關(guān)文檔推薦

Algorithm to convert RGB to HSV and HSV to RGB in range 0-255 for both(將 RGB 轉(zhuǎn)換為 HSV 并將 HSV 轉(zhuǎn)換為 RGB 的算法,范圍為 0-255)
How to convert an enum type variable to a string?(如何將枚舉類型變量轉(zhuǎn)換為字符串?)
When to use inline function and when not to use it?(什么時候使用內(nèi)聯(lián)函數(shù),什么時候不使用?)
Significance of ios_base::sync_with_stdio(false); cin.tie(NULL);(ios_base::sync_with_stdio(false) 的意義;cin.tie(NULL);)
Is TCHAR still relevant?(TCHAR 仍然相關(guān)嗎?)
C99 stdint.h header and MS Visual Studio(C99 stdint.h 頭文件和 MS Visual Studio)
主站蜘蛛池模板: 合肥仿石砖_合肥pc砖厂家_合肥PC仿石砖_安徽旭坤建材有限公司 | 长沙网站建设制作「网站优化推广」-网页设计公司-速马科技官网 | 浙江美尔凯特智能厨卫股份有限公司 | 无线联网门锁|校园联网门锁|学校智能门锁|公租房智能门锁|保障房管理系统-KEENZY中科易安 | 基业箱_环网柜_配电柜厂家_开关柜厂家_开关断路器-东莞基业电气设备有限公司 | 东莞工厂厂房装修_无尘车间施工_钢结构工程安装-广东集景建筑装饰设计工程有限公司 | 广州网站建设_小程序开发_番禺网站建设_佛山网站建设_粤联网络 | 钢格板|镀锌钢格板|热镀锌钢格板|格栅板|钢格板|钢格栅板|热浸锌钢格板|平台钢格板|镀锌钢格栅板|热镀锌钢格栅板|平台钢格栅板|不锈钢钢格栅板 - 专业钢格板厂家 | 谈股票-今日股票行情走势分析-牛股推荐排行榜 | 许昌奥仕达自动化设备有限公司 | 亳州网络公司 - 亳州网站制作 - 亳州网站建设 - 亳州易天科技 | 非标压力容器_碳钢储罐_不锈钢_搪玻璃反应釜厂家-山东首丰智能环保装备有限公司 | 酶联免疫分析仪-多管旋涡混合仪|混合器-莱普特科学仪器(北京)有限公司 | 顺景erp系统_erp软件_erp软件系统_企业erp管理系统-广东顺景软件科技有限公司 | 郑州墨香品牌设计公司|品牌全案VI设计公司 | 污水提升器,污水提升泵,地下室排水,增压泵,雨水泵,智能供排水控制器-上海智流泵业有限公司 | 【直乐】河北石家庄脊柱侧弯医院_治疗椎间盘突出哪家医院好_骨科脊柱外科专业医院_治疗抽动症/关节病骨伤权威医院|排行-直乐矫形中医医院 | Safety light curtain|Belt Sway Switches|Pull Rope Switch|ultrasonic flaw detector-Shandong Zhuoxin Machinery Co., Ltd | NBA直播_NBA直播免费观看直播在线_NBA直播免费高清无插件在线观看-24直播网 | 考勤系统_人事考勤管理系统_本地部署BS考勤系统_考勤软件_天时考勤管理专家 | 天助网 - 中小企业全网推广平台_生态整合营销知名服务商_天助网采购优选 | 电机修理_二手电机专家-河北豫通机电设备有限公司(原石家庄冀华高压电机维修中心) | 活性炭厂家-蜂窝活性炭-粉状/柱状/果壳/椰壳活性炭-大千净化-活性炭 | 护腰带生产厂家_磁石_医用_热压护腰_登山护膝_背姿矫正带_保健护具_医疗护具-衡水港盛 | 无线讲解器-导游讲解器-自助讲解器-分区讲解系统 品牌生产厂家[鹰米讲解-合肥市徽马信息科技有限公司] | 诺冠气动元件,诺冠电磁阀,海隆防爆阀,norgren气缸-山东锦隆自动化科技有限公司 | 广州网站建设_小程序开发_番禺网站建设_佛山网站建设_粤联网络 | 档案密集架_电动密集架_移动密集架_辽宁档案密集架-盛隆柜业厂家现货批发销售价格公道 | 气动隔膜阀_气动隔膜阀厂家_卫生级隔膜阀价格_浙江浙控阀门有限公司 | 仿清水混凝土_清水混凝土装修_施工_修饰_保护剂_修补_清水混凝土修复-德州忠岭建筑装饰工程 | 江苏远邦专注皮带秤,高精度皮带秤,电子皮带秤研发生产 | 骨密度检测仪_骨密度分析仪_骨密度仪_动脉硬化检测仪专业生产厂家【品源医疗】 | 北京三友信电子科技有限公司-ETC高速自动栏杆机|ETC机柜|激光车辆轮廓测量仪|嵌入式车道控制器 | 上海冠顶工业设备有限公司-隧道炉,烘箱,UV固化机,涂装设备,高温炉,工业机器人生产厂家 | 瑞典Blueair空气净化器租赁服务中心-专注新装修办公室除醛去异味服务! | 淘趣英语网 - 在线英语学习,零基础英语学习网站 | 沥青灌缝机_路面灌缝机_道路灌缝机_沥青灌缝机厂家_济宁萨奥机械有限公司 | 闭端端子|弹簧螺式接线头|防水接线头|插线式接线头|端子台|电源线扣+护线套|印刷电路板型端子台|金笔电子代理商-上海拓胜电气有限公司 | 办公室家具_板式办公家具定制厂家-FMARTS福玛仕办公家具 | 不锈钢发酵罐_水果酒发酵罐_谷物发酵罐_山东誉诚不锈钢制品有限公司 | 地磅-电子地磅维修-电子吊秤-汽车衡-无人值守系统-公路治超-鹰牌衡器 |