A. 關於C語言標准輸出函數printf的問題
這個問題考察的是運算符的優先順序,++和--的優先順序高於取反(-)
i++(或者i--)表示先取用i的值,然後再進行自加(或者自減)運算
++i(或者--i)表示先對i進行自加(或者自減)運算,再取用i的新值
多數編譯器會從右向左對參數壓棧,所以printf函數會從右向左依次計算參數值。
i=8,->(-i--)=-8,此時i=7
->(-i++)=-7,此時i=8
->(i--)=8,此時i=7
->(++i)=8,此時i=8
->(--i)=7,此時i=7
->(++i)=8,此時i=8
->i=8
但是,壓棧順序沒有硬性規定,所以不同編譯器可能有不同的壓棧操作,結果會有不同
B. C語言中printf是庫函數,那麼printf的代碼到底在哪裡呢
如果你能找到你的編譯器的庫文件放在哪裡,那麼只要把你的自己編寫的函數放在編譯器的庫函數的文件察橘中,直接引用就可以。
但是很多編譯器的庫函數是不開放的,你很難找到庫函數的文件在哪。
因此,你只能把自己寫的函數電腦的某個盤里,如d:\\盤,引用的時候直接引用就行。比如,自己寫個文件(myfile.h)放在d
盤,即路徑為d:\\myfile.h
舉個例子:
【1.】把myfile.h文件放在d盤
可以新建一個記事本文件巧穗(後綴.txt),把文件名改為(myfile.h),在該文件中添加如下內容:
//myfile.h自定義一個的輸出*圖行的文件,相當於庫函數
#include<stdio.h>
voiddisplay_san(intn)//列印*三角形
{
inti;
for(i=0;i<n;i++)
{
printf("*\n");
printf("***\n");
printf("*****\n");
printf("*******\n");
printf("*********\n");
printf("***********\n");
}
}
voiddisplay_si(intn)//列印*矩形
{
inti;
for(i=0;i<n;i++)
{
printf("******\n");
printf("**\n");
printf("**\n");
printf("**\n");
printf("**\n");
printf("******\敗寬團n");
}
}
//還可以有更多的函數.......放在一個文件中,成了自定義的庫函數
【2.】在主函數中,引入該文件:
#include"d:\\myfile.h"//引入自定義的文件,該文件包含兩個函數(即自定義的庫函數)
voidmain()
{
display_san(2);//在d:\\myfile.h文件中定義了
display_si(3);//在d:\\myfile.h文件中定義了
}
這就成了引用庫函數了!!!!!!
C. c中,當在printf進行算數運算,編譯器有創建臨時變數操作嗎
像加法這類比較簡單的計算,編譯仔桐器一般都是藉助寄存器直接完成的慧州。你可以認為編念碧坦譯器將寄存器作為臨時變數使用。
D. 編譯器提示 printf 未定義!這怎麼可能
據傳聞, 某些用於微軟視窗系弊瞎統的 C 編譯器不支持 printf()。也許可以讓這樣的編譯器認為寫的是 「控制台程宏友序」, 這樣編譯器會打開 「控制台窗口」 從蔽卜槐而支持 printf()。