簡體   English   中英

混淆靜態int並在printf中調用它們

[英]confusion about static int and calling them in printf

請測試此代碼並給我你的答案:

#include <stdio.h>

int func() {
static int n = 0;
n++;
return n;
}

int main() {
    /*int first = func();
    int second = func();*/
    printf(" first call : %d \n second call : %d ",func(),func());
    return 0;
}

從邏輯上講,它應該打印1和2,但它打印2和1。 如果取消注釋注釋並打印變量“first”和“second”,問題就解決了! 怎么了?

謝謝你!

函數調用參數的計算順序是未指定的,即編譯器可以在將返回值傳遞給printf之前以任意順序進行兩次func()調用。 如果您首先將結果分配給變量,顯然您可以決定使用它們的順序。

傳遞函數的參數的順序未在標准中定義,並且由編譯器使用的調用約定確定。 我認為在你的情況下,使用cdecl調用約定(許多C編譯器用於x86架構),函數中的參數從右到左進行評估。

因為在調用函數時它需要正確的關聯..即,printf中的最后一個首先被調用然后是前一個..這就是為什么它打印2然后1.嘗試使用兩個打印語句,如:printf(“First call:% d \\ n”個,FUNC()); printf(“第二次調用:%d \\ n”,func());

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM