討論區快速選單
知識庫快速選單
網路投保旅行平安險 政府補助!學嵌入式+物聯網 掌握Salesforce雲端管理秘訣
[ 回上頁 ] [ 討論區發言規則 ]
c++ For loop
更改我的閱讀文章字型大小
作者 : dangerlover(Eric)
[ 貼文 14 | 人氣 0 | 評價 0 | 評價/貼文 0 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2015/4/1 下午 01:42:50
剛在辦公室寫code寫到一半...突然停下在 for 前面
有個問題想要請各位高手幫忙一下...
不然小弟估計每次看到 for 都會卡住了...


先講講我對for的認識好了

for( init_expression; condition_expression ; loop_expression )

我問過幾個同事和朋友
大家在寫for這個迴圈的時候,通常都是很直覺得去使用
並不會想到為什麼for之所以為for

我的問題是

如何改寫for迴圈?

要改寫,首先要先知道怎麼樣運作( 這應該大家都沒問題才是... )

所以針對第一點init的部分
組成的value應該有 [ auto ] + [ NULL ] + [ A WORD ]

[ A WORD ] 可以被其他字替換 ( like : i , j ....etc )

想請各路高手提供思緒一下

讓小弟能寫出一個 eric ( init_expression; condition_expression ; loop_expression )

作者 : dangerlover(Eric)
[ 貼文 14 | 人氣 0 | 評價 0 | 評價/貼文 0 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2015/4/1 下午 05:22:52
對了...
不是用define eric for

這個方式..

而是想要寫出for裡面的功能
作者 : ozzy123(ozzy) 資訊類作業求救卓越專家C++卓越專家貼文超過4000則人氣指數超過30000點
[ 貼文 4473 | 人氣 37262 | 評價 10900 | 評價/貼文 2.44 | 送出評價 49 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2015/4/1 下午 06:40:02
would you please describe your question in detail ?
作者 : kagaya(kagaya) VC++優秀好手C++優秀好手貼文超過1000則人氣指數超過30000點
[ 貼文 1599 | 人氣 38709 | 評價 4590 | 評價/貼文 2.87 | 送出評價 115 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2015/4/2 上午 09:48:18
想了解for是什麼 去讀組合語言
而不是自己寫一個function亂做
作者 : ozzy123(ozzy) 資訊類作業求救卓越專家C++卓越專家貼文超過4000則人氣指數超過30000點
[ 貼文 4473 | 人氣 37262 | 評價 10900 | 評價/貼文 2.44 | 送出評價 49 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人dangerlover註記此篇回應為很有道理 2015/4/2 上午 11:08:56
try to code an easy for loop , such like for (int i=0; i< 5 ; i ++ ); then compile it and launch the option - dis-assembly in your IDE and watch those assembly codes in the watch window.
作者 : dangerlover(Eric)
[ 貼文 14 | 人氣 0 | 評價 0 | 評價/貼文 0 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2015/4/2 下午 02:36:49
裡面有點複雜...
作者 : ozzy123(ozzy) 資訊類作業求救卓越專家C++卓越專家貼文超過4000則人氣指數超過30000點
[ 貼文 4473 | 人氣 37262 | 評價 10900 | 評價/貼文 2.44 | 送出評價 49 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2015/4/2 下午 09:32:53
Would you please describe your question in detail ?
Maybe it is not difficult :-)




作者 : ozzy123(ozzy) 資訊類作業求救卓越專家C++卓越專家貼文超過4000則人氣指數超過30000點
[ 貼文 4473 | 人氣 37262 | 評價 10900 | 評價/貼文 2.44 | 送出評價 49 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2015/4/2 下午 09:33:00
Would you please describe your question in detail ?
Maybe it is not difficult :-)




作者 : ozzy123(ozzy) 資訊類作業求救卓越專家C++卓越專家貼文超過4000則人氣指數超過30000點
[ 貼文 4473 | 人氣 37262 | 評價 10900 | 評價/貼文 2.44 | 送出評價 49 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2015/4/2 下午 09:33:55
Would you please describe your question in detail ?
Maybe it is not difficult :-)




作者 : sflam(Raymond)討論區板主 Visual C++ .NET卓越專家VC++一代宗師新手入門優秀好手資訊類作業求救頂尖高手C++一代宗師貼文超過4000則
[ 貼文 4945 | 人氣 9172 | 評價 32290 | 評價/貼文 6.53 | 送出評價 142 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2015/4/3 上午 03:10:09
>先講講我對for的認識好了
>
>for( init_expression; condition_expression ; loop_expression )

init_expression 跟 loop_expression 可以是任何式子, 包括用逗號 (,) 來分隔的式子, 如:
  x += 1, y += 2

唯一的分別是, 只有在 init_expression 那堣像\定義新的物件, 因為語法的關係, 所有新定義的物件都是同一類型, 如:
  int i = 0, j = i + 1;

如果要不同類型, 你必須在 for() 的外面定義, 如:
  int i;
  double d;
  for (i = 0, d = 0.0; ...)

condition_expression 可以是任何能夠計算出 0 或 非-0 的式子, 如果你用逗號(,) 來分隔式子, 那它們將依循程式語言逗號運算子的規格來操作.

這三個部分的任何一個部分都可以是空的, 如:
  for(;;)

空的 condition_expression 等同於 true.


式子:
  for (exp1; exp2; exp3)
    stmt;

等同於:
  {
    exp1;
    while (exp1)
    {
      stmt;
      exp3;
    }
  }

你對 for() 式子的認知包括以上所講的嗎?

>我的問題是
>如何改寫for迴圈?

你想要怎麼樣的「改寫」?
為什麼你認為你需要「改寫」?
你想要的「改寫」能夠包括程式語法使用上的靈活性嗎?

作者 : ozzy123(ozzy) 資訊類作業求救卓越專家C++卓越專家貼文超過4000則人氣指數超過30000點
[ 貼文 4473 | 人氣 37262 | 評價 10900 | 評價/貼文 2.44 | 送出評價 49 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2015/4/3 下午 05:53:21
for ( clause-1 ; expression-2 ; expression-3 ) statement
作者 : ozzy123(ozzy) 資訊類作業求救卓越專家C++卓越專家貼文超過4000則人氣指數超過30000點
[ 貼文 4473 | 人氣 37262 | 評價 10900 | 評價/貼文 2.44 | 送出評價 49 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2015/4/3 下午 07:23:49
actually , too many questions can be found via google or other searching engines . They all are not difficult , just need to spend a little time . :-)
作者 : ozzy123(ozzy) 資訊類作業求救卓越專家C++卓越專家貼文超過4000則人氣指數超過30000點
[ 貼文 4473 | 人氣 37262 | 評價 10900 | 評價/貼文 2.44 | 送出評價 49 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2015/4/4 下午 10:07:40
recursive method is a way that can resolve some questions that defines recursive definition.
作者 : ozzy123(ozzy) 資訊類作業求救卓越專家C++卓越專家貼文超過4000則人氣指數超過30000點
[ 貼文 4473 | 人氣 37262 | 評價 10900 | 評價/貼文 2.44 | 送出評價 49 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2015/4/5 上午 12:08:50
compiler can optimize recursive call
作者 : dangerlover(Eric)
[ 貼文 14 | 人氣 0 | 評價 0 | 評價/貼文 0 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2015/4/9 上午 08:52:55
ok, i want to write a new loop ,
ex name is


eric( init_expression; condition_expression ; loop_expression )

but , not use #define

how can i do ?


this's my question....


作者 : dangerlover(Eric)
[ 貼文 14 | 人氣 0 | 評價 0 | 評價/貼文 0 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2015/4/9 上午 09:10:58
To dear sflam(Raymond)

我對for的認知是包括你所敘述的

而我想要改寫的原因是因為我想了解當初for這個回圈是怎麼設計出來的

想推看看

回答你問的問題

1. 我想要的改寫,是就我問題所敘述的

    重新建立一個新的迴圈,而這個迴圈要跟for迴圈擁有一樣的功能


2. 我會需要改寫,是因為我想了解裡面的結構,想要知道他怎麼運作
    簡單來說,就是我不想只會使用工具,而不知道工具是如何製造。


3. 這就是我在想的內容,所以就目前目的,我是以這個loop來為範本
    然後試者先模仿這個loop來撰寫出一個新loop來。
作者 : kagaya(kagaya) VC++優秀好手C++優秀好手貼文超過1000則人氣指數超過30000點
[ 貼文 1599 | 人氣 38709 | 評價 4590 | 評價/貼文 2.87 | 送出評價 115 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2015/4/9 上午 10:37:45
for迴圈又不是function 它是c++的語法
組譯器直接編成語合語言
你不去研究組語 還是堅持要把它當做迴圈來寫
真神!
作者 : ozzy123(ozzy) 資訊類作業求救卓越專家C++卓越專家貼文超過4000則人氣指數超過30000點
[ 貼文 4473 | 人氣 37262 | 評價 10900 | 評價/貼文 2.44 | 送出評價 49 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2015/4/9 上午 10:45:27
a way for you reference
1. add new feature of loop syntax structure ---> BNF
2. Download free & open source c compiler source codes , such like gcc
3. find all relevant codes about loop parts and add and modify them
4. code some codes for testing customized loop structure syntax and compile them and watch the result is available or not .

have fun :-)
作者 : kagaya(kagaya) VC++優秀好手C++優秀好手貼文超過1000則人氣指數超過30000點
[ 貼文 1599 | 人氣 38709 | 評價 4590 | 評價/貼文 2.87 | 送出評價 115 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2015/4/9 上午 11:03:15
http://stackoverflow.com/questions/9153491/coding-for-loop-with-an-assembler-in-c-function
作者 : ozzy123(ozzy) 資訊類作業求救卓越專家C++卓越專家貼文超過4000則人氣指數超過30000點
[ 貼文 4473 | 人氣 37262 | 評價 10900 | 評價/貼文 2.44 | 送出評價 49 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2015/4/9 上午 11:33:25
this is a compiler source codes page for 8080 in 1980s.
http://www.project-fbin.hostoi.com/Proj_SmC/CainC/cain_ddj.c
or following site that contains several projects about small c compiler implementation
http://www.cpm.z80.de/small_c.html
To understand the implementation of c compiler maybe a good way.
if you really want to define a new loop structure , you should know the principle of formal language and its syntax . Then design its parser and implement it.
a common tools for parser design - http://dinosaur.compilertools.net/
yacc & lex is a common tool for generating the front end of compiler (parser/tokenizer).
http://invisible-island.net/byacc/byacc.html

http://www.antlr.org/ - this is a good tool for parsing
作者 : ozzy123(ozzy) 資訊類作業求救卓越專家C++卓越專家貼文超過4000則人氣指數超過30000點
[ 貼文 4473 | 人氣 37262 | 評價 10900 | 評價/貼文 2.44 | 送出評價 49 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人dangerlover註記此篇回應為很有道理 2015/4/9 上午 11:39:34
c bnf syntax - http://www.cs.man.ac.uk/~pjj/bnf/c_syntax.bnf
you can find the part - "iteration_stat" in above text file.

http://www.nongnu.org/bnf/
a BNF parser generator
作者 : ozzy123(ozzy) 資訊類作業求救卓越專家C++卓越專家貼文超過4000則人氣指數超過30000點
[ 貼文 4473 | 人氣 37262 | 評價 10900 | 評價/貼文 2.44 | 送出評價 49 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2015/4/9 上午 11:54:31
http://ds9a.nl/lex-yacc/cvs/lex-yacc-howto.html
how to use yacc & lex
作者 : dangerlover(Eric)
[ 貼文 14 | 人氣 0 | 評價 0 | 評價/貼文 0 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2015/4/9 下午 04:59:40
Dear kagaya(kagaya) :

thank you for your answer , let me try first .
作者 : dangerlover(Eric)
[ 貼文 14 | 人氣 0 | 評價 0 | 評價/貼文 0 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2015/4/9 下午 05:00:01
Dear kagaya(kagaya) :

thank you for your answer , let me try first .
作者 : dangerlover(Eric)
[ 貼文 14 | 人氣 0 | 評價 0 | 評價/貼文 0 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2015/4/9 下午 05:00:05
Dear kagaya(kagaya) :

thank you for your answer , let me try first .
作者 : sflam(Raymond)討論區板主 Visual C++ .NET卓越專家VC++一代宗師新手入門優秀好手資訊類作業求救頂尖高手C++一代宗師貼文超過4000則
[ 貼文 4945 | 人氣 9172 | 評價 32290 | 評價/貼文 6.53 | 送出評價 142 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2015/4/9 下午 09:10:52
>而我想要改寫的原因是因為我想了解當初for這個回圈是怎麼設計出來的

你想要知道 for 關鍵字的歷史!?

據我所知, 最早用這個關鍵字的程式語言是 ALGOL, 它有幾個 for 的句法, 其中一個是
  for <變數> := V1 [step V2] until V3 do ...

有別於其它的迴圈架構, for 的語法把迴圈的控制變數, 起始點, 遞增值, 及終結點清楚的顯示在單一句子裡. (其它的程式語言有類似的架構, 但用的是不同的關鍵字, 如 FORTRAN 用的是 do 關鍵字).

ALGOL 直接或間接影響了後來的許多程式語言, 其中一個是 BCPL. BCPL 的參考文件中關於 for 指令有以下的說明:
  for N = E1 to E2 do C
  where N is a name.

  The above statement is equivalent to:
    { let N=El
    until N > E2 do
      { C
      N := N+1 } }

(文件用了特殊符號, 我把它們換成大家比較熟悉的 '{' 跟 '}').
上面很明顯的說明, for 指令隱含了 3 個式子:
  - loop 變數的定義及初始值: let N=E1
  - 測試迴圈指令: until N > E2 do
  - loop 變數的遞增: N := N+1

C 語言參考了 BCPL 及 B 語言的語法, 用 for 這個關鍵字, 並在 C 語法的架構上把這三個隱含的式子分成明確的 3 個部份, 並添增語法及語意上的靈活性.

>1. 我想要的改寫,是就我問題所敘述的
>
> 重新建立一個新的迴圈,而這個迴圈要跟for迴圈擁有一樣的功能

除非你想要設計一個新的程式語言, 你不可能更改現有語言語法的架構. 也就是說, 像
  eric( init_expression; condition_expression ; loop_expression )

在不用 preprocessor 的前提下是不可能做到的.

C 語言的語法已經很簡潔了, 除了 goto, C 語言已有三個迴圈架構: for, while 跟 do-while. 其中 for while 已經算是重疊了, 因為任何 for 的句子都能用 while 來實現, 反之亦然. 新增一個跟 for 迴圈一樣功能的迴圈對了解 for 迴圈的語意有什麼意義?


>2. 我會需要改寫,是因為我想了解裡面的結構,想要知道他怎麼運作
> 簡單來說,就是我不想只會使用工具,而不知道工具是如何製造。

for 式子的運作就是依照程式語言語法/語意上的定義來運作. 你能用 while 來實現 for 的功能, 你就已經知道 for 怎麼運作.

for 不是工具, 編譯器才是工具. 你想要知道工具如何製造那是要研究編譯器如何編譯 for, 這跟 for 怎麼運作是兩回事.

要編譯 for 其中一個方法是把 for 式子轉成 while 式子, 然後編譯.
 

>3. 這就是我在想的內容,所以就目前目的,我是以這個loop來為範本
> 然後試者先模仿這個loop來撰寫出一個新loop來。

你唯一能夠做的就是用 C 語言提供的其它迴圈架構, 包括 goto 來重寫一個 for() 的句子. 或者寫一個編譯器來編譯你新發明的語法. 否則, 你只用一個新的關鍵字來取代 'for' 這個關鍵字, 但做的又是跟 for 同樣的東西有什麼意義?

到現在還是不清楚你真正的目的是什麼!
作者 : dangerlover(Eric)
[ 貼文 14 | 人氣 0 | 評價 0 | 評價/貼文 0 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2015/4/10 上午 10:36:32
Dear sflam(Raymond)

很感謝你精闢的解說,我的問題如同你第一個回答,是單純想知道for 是如何製作出來的,畢竟工具用久了,還是會想了解工具是如何製造的,所以,才有了今天的發文。


用了一個簡單的方事先測試
int main()
{
for(int i=0;i<10;i++)
cout<<'a';

}

發現在剛進去這個迴圈的時候,會先經過四層的檢測,假如都是_Ok的話,才進入if的語句裡面

typedef char _Elem;
typedef basic_ostream<_Elem, _Traits> _Myos;
ios_base::iostate _State = ios_base::goodbit;
const typename _Myos::sentry _Ok(_Ostr);

if (_Ok)
{ // state okay, insert
streamsize _Pad = _Ostr.width() <= 1 ? 0 : _Ostr.width() - 1;

_try_IO_BEGIN
if ((_Ostr.flags() & ios_base::adjustfield) != ios_base::left)
for (; _State == ios_base::goodbit && 0 < _Pad;
--_Pad) // pad on left
if (_Traits::eq_int_type(_Traits::eof(),
_Ostr.rdbuf()->sputc(_Ostr.fill())))
_State |= ios_base::badbit;

if (_State == ios_base::goodbit
&& _Traits::eq_int_type(_Traits::eof(),
_Ostr.rdbuf()->sputc(_Ch)))
_State |= ios_base::badbit;

for (; _State == ios_base::goodbit && 0 < _Pad;
--_Pad) // pad on right
if (_Traits::eq_int_type(_Traits::eof(),
_Ostr.rdbuf()->sputc(_Ostr.fill())))
_State |= ios_base::badbit;
_catch_IO_(_Ostr)
}

_Ostr.width(0);
_Ostr.setstate(_State);
return (_Ostr);
}


這是還沒完全跟進去的時候程式做的事情,跟進去=_=| 我怕會很難出來了...


很感謝大大耐心回復^_^ |
作者 : kagaya(kagaya) VC++優秀好手C++優秀好手貼文超過1000則人氣指數超過30000點
[ 貼文 1599 | 人氣 38709 | 評價 4590 | 評價/貼文 2.87 | 送出評價 115 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2015/4/10 上午 10:48:40
你裡面用了for....
用 for去做出for 不會很矛盾?
作者 : dangerlover(Eric)
[ 貼文 14 | 人氣 0 | 評價 0 | 評價/貼文 0 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2015/4/10 下午 01:34:19
那是跟進去裡面看的,只看進去的第一層,沒有完全跟進去
作者 : sflam(Raymond)討論區板主 Visual C++ .NET卓越專家VC++一代宗師新手入門優秀好手資訊類作業求救頂尖高手C++一代宗師貼文超過4000則
[ 貼文 4945 | 人氣 9172 | 評價 32290 | 評價/貼文 6.53 | 送出評價 142 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2015/4/10 下午 10:28:15
>用了一個簡單的方事先測試
>int main()
>{
> for(int i=0;i<10;i++)
> cout<<'a';
>
>}
>
>發現在剛進去這個迴圈的時候,會先經過四層的檢測,假如都是_Ok的話,才進入if的語句裡面

那是 operator<<(ostream&, char) 的定義, 跟你的 for 迴圈一點關係都沒有.

你把你程式改成:

  int main()
  {
    cout << 'a';
  }

進入 cout << 'a' 時還是同樣的原始碼.

你以為你看到的那些跟你的 for 迴圈有關嗎? 錯!! for() 不是 macro, 不是函式, 不是 API, 它沒有原始碼, 不能展開, 它是語言定義裡的架構之一. 你唯一能夠看到的是編譯器針對整個 for 迴圈所做的編譯, 「整個 for 迴圈」包括了 for ()括號裡的三段式子及 {} 裡的主體.

為什麼 for 的編譯結果要包括 {} 的主體, 因為 for ()括號裡的三個式子各有不同的執行時刻, 第三個式子必須在主體執行完後執行. 你如果把 for 的原始碼轉用 while 來寫就很容易看出來了.

你唯一能看到的 for() 迴圈的「展開」是在編譯後的代碼裡.

作者 : dangerlover(Eric)
[ 貼文 14 | 人氣 0 | 評價 0 | 評價/貼文 0 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2015/4/13 上午 09:45:55
謝謝,學習到了,說真的我真的沒跟過cout 過

很感謝你熱心的提供思緒給我^_^
 板主 : 徵求中
 > C++ Builder - 討論區
 - 最近熱門問答精華集
 - 全部歷史問答精華集
 - C++ Builder - 知識庫
  ■ 全站最新Post列表
  ■ 我的文章收藏
  ■ 我最愛的作者
  ■ 全站文章收藏排行榜
  ■ 全站最愛作者排行榜
  ■  月熱門主題
  ■  季熱門主題
  ■  熱門主題Top 20
  ■  本區Post排行榜
  ■  本區評價排行榜
  ■  全站專家名人榜
  ■  全站Post排行榜
  ■  全站評價排行榜
  ■  全站人氣排行榜
 請輸入關鍵字 
  開始搜尋
 
Top 10
評價排行
C++ Builder
1 windblown 5420 
2 Raynor 3120 
3 阿泰 2980 
4 workman 1650 
5 Linkin 1360 
6 CrazyStar 1260 
7 青衫 1160 
8 jonay 1080 
9 charlie 900 
10 小呆 770 
C++ Builder
  專家等級 評價  
  一代宗師 10000  
  曠世奇才 5000  
  頂尖高手 3000  
  卓越專家 1500  
  優秀好手 750  
Microsoft Internet Explorer 6.0. Screen 1024x768 pixel. High Color (16 bit).
2000-2018 程式設計俱樂部 http://www.programmer-club.com.tw/
0.171875