A. 如何在C語言中定義一個函數
需要准備的材料分別有:電腦、C語言編譯器。
1、首先,打開C語言編譯器,新建一個初始.cpp文件,例如:test.cpp。
B. C語言 函數定義概念問題
先舉個例子:
#include <stdio.h>
int max(int,int); //這是函數max的申明,最後要加分號
int main()
{
int a=1,b=2,c;
c = max(a,b); //這是函數max的使用
printf("%d",c);
return 0;
}
int max(int n,int m) //這是函數max的定義部分,最後不加分號
{
if (n>m)
return n;
else
return m;
}
不能在函數體內定義函數是什麼意思?
【就是說函數在程序中不能嵌套定義,這個和Pascal語言不同,例如上面程序中,max函數不能定義在main函數中間】
定義是聲明還是使用?
【定義既不是申明,也不是使用,函數具體功能的實現代碼叫做函數的定義,如上面程序最後7行就是定義】
函數不是應該先聲明在使用嗎?
【是的,但如果函數定義在函數使用之前,就可以不用申明(如下面程序)。函數定義在函數使用後的情況下(如上面程序),先聲明,能使編譯器在編譯在編譯過程中能夠識別使用的函數】
#include <stdio.h>
int max(int n,int m) //這是函數max的定義部分,最後不加分號
{
if (n>m)
return n;
else
return m;
}
int main()
{
int a=1,b=2,c;
c = max(a,b); //這是函數max的使用
printf("%d",c);
return 0;
}
定義如何解釋?
【見第二個問題】
C. c++定義在類裡面的函數,如果編譯器一定將他內聯處理嗎
inline關鍵字只是一個提示,告訴編譯器應該將此函數內聯處理,最終是否內聯取決於編譯器優化策略,如果一個函數過長,即使聲明為內聯函數,編譯器也可以不內聯處理。
D. 編譯器怎麼處理定義了未使用的函數
編譯器不會生成可執行文件,有的編譯器會提示「警告」,有的不會的。
E. c語言,在定義函數時,如何指定函數地址,即要求編譯器使用我指定的函數地址
extern void test(void)__attribute__((section(".ARM.__at_0x0001")));
F. 內聯函數的定義對編譯器而言必須是可見的什麼意思
解答其實已經說得很清楚了,編譯器在看到程序中調用普通函數的代碼時,是在這里填一個函數的地址,然後在執行時跳轉到函數那邊去。而碰到內聯函數時,是將函數的內容全部在調用點展開,所以它必須知道這個內聯函數的定義是什麼,否則無法展開。而將內聯函數的定義放在頭文件(.h)中,一旦include了該頭文件,就能看到內聯函數的全部內容了,也就可以在調用點完全展開內聯函數。如果將內聯函數放在源文件中(.c),編譯器在看到內聯函數的調用時,是無法知道內聯函數的內容的,因此也無法展開,所以必須將內聯函數定義在頭文件中。
G. 函數只定義了一次, 調用了一次, 但編譯器提示非法重定義了。
在范圍內沒有聲明就調用 (可能是第一次調用在函數的定義之前) 的函數被認為返回整型 (int) (且沒有任何參數類型信息), 如果函數在後邊聲明或定義成其它類型就會導致矛盾。所有函數 (非整型函數一定要)必須在調用之前聲明。另一個可能的原因是該函數與某個頭文件中聲明的另一個函數同名。
H. 函數定義時編譯器報錯存在正文時不允許未命名的原型參數
把你的文件後綴名名改成cpp就行了,.c是純C語言,不能用引用的.
I. C++中編譯時遇到函數的定義,編譯器做了哪些事,
我個人的見解是這樣的,數組因為在定義的時候確定了數組的大小所以編譯器才可以為其分配內存。函數名和數組名就是內存的首地址,所以函數名是代表的入口地址,當你主程序真正調用的這個函數時候,才會為從入口地址進入,並且為這個分配其確定大小的內存。事先不執行的內存都是為空,不為其分配,只有用到了並且明確了其所需多少內存時候才會分配。比如說一個函數僅僅定義了它,在沒用在調用它的時候系統是不能知道所佔用的內存,並且沒必要去開辟內存。只有執行到需要調用的,只需要如函數名(即入口的內存地址)開始分配並調用即可。
至於編譯為什麼能分配內存,這個是由操作系統和編譯器共同完成,內存是動態變化的,所以第三方用戶的程序使用的內存是執行時候系統和編譯器臨時給的地址。
這是鄙人的一些見解,如有不對請指出
J. C++中函數中定義函數原型,為什麼編譯器不報錯
編譯器只是做的語法檢查,函數原型也就是函數聲明,只要聲明出現在使用之前,編譯器就不會報錯。但是如果函數沒有定義的話,鏈接的時候鏈接器會報錯,會出現undefined reference的錯誤。