久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2657|回復: 15
打印 上一主題 下一主題
收起左側

請教一個C語言switch語句的問題

[復制鏈接]
跳轉到指定樓層
樓主
ID:47286 發表于 2022-2-19 22:58 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
標準程序

case 1:
a=1;
b=0;
c=10
break;

case 2:
a=0;
b=1;
c=10;
break;

可見c=10是相同的 問題是 如何把相同的行只寫一次 以前看過一位高人寫過可我給忘了 而且 找不到那帖子了

我合并了一下是下面這樣 結果都不對 也許就不行吧 可有點不死心啊 求高人給鑒定

case 1:
a=1;
b=0;

case 2:
a=0;
b=1;
c=10;

break;
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:625730 發表于 2022-2-19 23:17 | 只看該作者
break不能少,c=10要不寫在swtich外面,要不也不要少。
回復

使用道具 舉報

板凳
ID:47286 發表于 2022-2-19 23:31 | 只看該作者
TEC 發表于 2022-2-19 23:17
break不能少,c=10要不寫在swtich外面,要不也不要少。

感謝回復先 你說的對 老老實實寫就沒問題 我是好奇switch語句有沒有更牛的寫法

假如是if語句 可以嵌套 那么一層里把需要歸并的寫前面就行 但switch語句里假如只有1和2允許修改c值的情況下 寫前面會有問題吧
回復

使用道具 舉報

地板
ID:624769 發表于 2022-2-19 23:41 | 只看該作者
dzbj 發表于 2022-2-19 23:31
感謝回復先 你說的對 老老實實寫就沒問題 我是好奇switch語句有沒有更牛的寫法

假如是if語句 可以嵌套 ...

可以用 goto 但是,不合算,C=10;   要比goto 高效的多。
回復

使用道具 舉報

5#
ID:883242 發表于 2022-2-20 01:51 | 只看該作者
你的寫法確實節約了程序的長度,但是運行時間反而變長了。貼出完整的switch代碼,看看能優化到什么程度,你現在貼出來的代碼如果是全部的話,在switch前面給c賦值就是最優解。
回復

使用道具 舉報

6#
ID:373388 發表于 2022-2-20 09:20 | 只看該作者
不清楚您的完整邏輯,表面看把c寫在switch外面就可以,但仔細分析,從邏輯來看case 3的例外情況呢,所以沒有優化的必要。
回復

使用道具 舉報

7#
ID:47286 發表于 2022-2-20 13:43 | 只看該作者
188610329 發表于 2022-2-19 23:41
可以用 goto 但是,不合算,C=10;   要比goto 高效的多。

感謝回復 從過去的交流得到經驗 你在效率方面的評論毋庸置疑
回復

使用道具 舉報

8#
ID:47286 發表于 2022-2-20 13:53 | 只看該作者
Hephaestus 發表于 2022-2-20 01:51
你的寫法確實節約了程序的長度,但是運行時間反而變長了。貼出完整的switch代碼,看看能優化到什么程度,你 ...

感謝回復

這個問題本來沒有啥完成函數 只是寫程序半路突然冒出個想法 在沒有完整思路的時候 你這也確實是最好的建議
回復

使用道具 舉報

9#
ID:47286 發表于 2022-2-20 13:56 | 只看該作者
xhaity 發表于 2022-2-20 09:20
不清楚您的完整邏輯,表面看把c寫在switch外面就可以,但仔細分析,從邏輯來看case 3的例外情況呢,所以沒 ...

感謝回復

目前看來 各位大佬的建議都是沒必要
回復

使用道具 舉報

10#
ID:624769 發表于 2022-2-20 19:09 來自手機 | 只看該作者
dzbj 發表于 2022-2-20 13:43
感謝回復 從過去的交流得到經驗 你在效率方面的評論毋庸置疑

keil c,在Switch的優化方面是做的比較好的,我曾經為了合并同類項,有過在Switch里面加goto這種很不c的做法,后來發現完全畫蛇添足。你也是實干派,你可以做個實驗,現在這個例子相同的只有一句,你如果想同的有3句以上,不管是內容還是排列順序都一樣的話,在編譯時keil 會自動把他們合并,假定case 1和2有5句相同,2和3有4句相同,keil也會弄出一個最優合并方案,這個你簡單寫一下,編譯后看一下編譯后代碼即可,雖然是匯編,但是簡單的跳轉應該不影響你閱讀。當然有個前提,就是這里說的相同項,必須是從break開始往上倒數,完全一致的相同項,包括順序。
回復

使用道具 舉報

11#
ID:47286 發表于 2022-2-20 20:51 | 只看該作者
188610329 發表于 2022-2-20 19:09
keil c,在Switch的優化方面是做的比較好的,我曾經為了合并同類項,有過在Switch里面加goto這種很不c的 ...

謝謝

一直對keil的優化摸不著頭腦 優化等級里有一個就是重復語句盡量用一個 但使用中效果一般 你這么一提醒是個很好的啟發 而且道理上講得通 “當然有個前提,就是這里說的相同項,必須是從break開始往上倒數,完全一致的相同項,包括順序。” 這句我覺得挺重點的
回復

使用道具 舉報

12#
ID:415064 發表于 2022-2-21 09:16 | 只看該作者
錯了,這樣最終結果當case1時,a=1,b=0,c=10      沒啥特殊的技巧,老老實實寫吧,可以定義個函數,這樣修改C的時候,就不用哪兒都修改
回復

使用道具 舉報

13#
ID:47286 發表于 2022-2-21 09:43 | 只看該作者
wojiaoguogai 發表于 2022-2-21 09:16
錯了,這樣最終結果當case1時,a=1,b=0,c=10      沒啥特殊的技巧,老老實實寫吧,可以定義個函數,這樣 ...

感謝回復 明白
回復

使用道具 舉報

14#
ID:434018 發表于 2022-2-21 14:59 | 只看該作者
switch (x)
{
c=10;
case 1:
           a=1;
           b=0;
break;

case 2:
        a=0;
        b=1;
break;
}
回復

使用道具 舉報

15#
ID:47286 發表于 2022-2-21 18:31 | 只看該作者

感謝你的回復

是我描述問題不夠全面 有誤導嫌疑 我想請教的是當不同分支里有相同指令又有不同指令時 能不能合并和怎么合并分支 因為我自己沒想出來

你提供的回答是正確的 但有時候不能這么用 因為假如case1需要c=10 case2需要C=10 但case3分支里不允許修改c值時 這么寫等于在case3時也把c變量改了

目前得到的大部分意見都是按規矩寫
回復

使用道具 舉報

16#
ID:1003226 發表于 2022-2-23 10:35 | 只看該作者
break;執行完要跳出的
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 美女黄色在线观看 | 国产第二页| 久久久综合色 | 婷婷在线免费 | 国产日韩久久 | 欧美一区在线看 | 国产精品久久久久久久久免费相片 | 亚洲一区二区三区免费观看 | 亚洲精品国产电影 | 91精品国产综合久久久久久丝袜 | 免费午夜视频 | 国产精品一区在线观看你懂的 | 日韩精品在线看 | 国产精品久久久久久久久久 | 91免费高清 | 亚洲综合大片69999 | 成人免费黄视频 | 精久久久 | 色综合色综合色综合 | www国产成人免费观看视频 | 国产激情在线 | 欧美激情一区二区三区 | 黄色av网站在线观看 | 中文字幕亚洲精品 | 亚洲成人久久久 | 国产日韩欧美在线观看 | 欧美黄色免费网站 | 国产免费观看久久黄av片涩av | 99久久99| 欧美做暖暖视频 | 免费不卡视频 | 久久久久久www | 碰碰视频| 久久国产区 | 蜜桃在线一区二区三区 | 国产日韩av一区二区 | 日韩一区二区精品 | 激情婷婷成人 | 免费在线观看成人av | 毛片视频观看 | 在线观看国产网站 |