當前位置:首頁 » 編程語言 » c語言前向聲明
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言前向聲明

發布時間: 2022-09-19 18:55:48

1. c語言 函數聲明前extern的用法

個人看法,僅供參考。
(1)別的就是指「這一個」以外的;C盤定義,D盤調用,原則上可以,但是麻煩,寫程序應該越簡單越好,不提倡這樣做;「別的」原則上沒有限定幾層,但是最好放在同一個文件夾,原因也說了,分開放麻煩。
(2)作用相同,不完全等價。區別在哪呢?include 「*.h」
int f();把「*.h」里的所有東西都搬過來(除了f()之外可能還有其他的),那麼肯定包含有f();而extern int f();表示你明確知道你要調用的是「*.h」里的f()這個函數,其它你都不需要。
「這么說,如果所有外部函數聲明時都加上extern就不需要include 「*.h」頭文件了?」是的,但是你想想,如果你所有外部函數都要用到的話,你自己手動給所有函數加上extern還是直接一個include 「*.h」哪個更方便呢

2. c語言函數聲明

假設主函數main()。其他函數void fun(int a,int *b)。

關於函數定義和聲明:

在代碼中fun函數,有完整函數體的代碼就是函數定義部分,比如void fun(int a,int *b){。。。};。

如果沒有具體實現的函數體代碼(也就是大括弧內容),那麼就是函數聲明。比如void fun(int ,int *);

關於函數聲明和調用:

如果fun函數定義在main代碼上面。比如:

void fun(int a,int *b){。。。};

int main(){

int a=0,int b=0;

......

fun(a,&b);//這里fun定義代碼在main上面,所以可以不需要聲明。反之需要先寫聲明語句

return 0;

}

關於函數局部變數及全局變數:

簡單區分:

定義在函數之外的就是全局變數,這個變數所有函數都可以直接使用,並且共用同一個地址。任意函數修改了變數值,其他函數調用也會變。

定義在函數之內的就是局部變數,局部變數只屬於該函數,其他函數即使定義了同樣名字的變數,這兩個變數也不同地址,互不相干。

比如:

int a;//這就是全局變數,作用域下所有函數共用

int main()

{

int b;//這就是局部變數,只在本函數有效,如果想在調用fun函數時讓fun也使用該變數,需要把這個變數的地址作為參數傳遞過去。

printf("%d",b);

return 0;

}

注意:c語言中允許局部變數和全局變數同名,但是同名的局部變數會屏蔽全局變數,實際代碼避免同名。

關於函數傳值和傳址:

如函數void fun(int a,int *b){..........};這里形參a 和*b,分別表示一個值和一個地址

所以在調用該函數時,比如:

int main()

{

int c,d;

fun(c,&d);//這里調用就對應上面形參類型,第一個參數傳遞了c的值(傳值),第二個參數傳遞了d的地址(傳址),這里c和&d,叫做實參。當fun函數運行時改變了a和b指向地址的值,對應main函數中c的值不變,d的值改變。

return 0;

}

順帶一說:局部變數,在函數運行結束後會自動釋放,所以想把局部變數地址作為返回值,需要用malloc函數申請。(這里看不懂可以暫時忽視)

3. C語言中的「輸入端的預期聲明或語句」 是什麼意思

你說的應該是前向引用聲明吧。也就是在變數或者函數使用前需要先定義一下。C語言中的「輸入端的預期聲明或語句」 是什麼意思

4. 在C語言中聲明和定義有什麼區別

C語言變數的定義和聲明的不同之處:

1、變數在使用前就要被定義或者聲明;

2、在一個程序中,變數只能定義一次,卻可以聲明多次;

3、定義分配存儲空間,而聲明不會

(4)c語言前向聲明擴展閱讀:

變數的定義:用於為變數分配存儲空間,還可以為變數指定初始值。在程序中,變數有且僅有一個定義。

聲明:用於向程序表明變數的類型和名字。

定義也是聲明:當定義變數的時候我們聲明了它的類型和名字。可以通過使用extern聲明變數名而不定義它。不定義變數的聲明包括對象名、對象類型和對象類型前的關鍵字extern。

extern聲明不是定義,也不分配存儲空間。事實上它只是說明變數定義在程序的其他地方。程序中變數可以聲明多次,但只能定義一次。

只有當聲明也是定義時,聲明才可以有初始化式,因為只有定義才分配存儲空間。初始化式必須要有存儲空間來進行初始化。如果聲明有初始化式,那麼它可被當作是定義,即使聲明標記為extern。

任何在多文件中使用的變數都需要有與定義分離的聲明。在這種情況下,一個文件含有變數的定義,使用該變數的其他文件則包含該變數的聲明(而不是定義)。

5. C語言里聲明是什麼意思

什麼是聲明:有兩重含義,如下:

第一重含義:告訴編譯器,這個名字已經匹配到一塊內存上了(伊人已嫁,吾將何去何

從?何以解憂,唯有稀粥),下面的代碼用到變數或對象是在別的地方定義的.聲明可以出

現多次.

第二重含義:告訴編譯器,我這個名字我先預定了,別的地方再也不能用它來作為變數

名或對象名.比如你在圖書館自習室的某個座位上放了一本書,表明這個座位已經有人預

訂,別人再也不允許使用這個座位.其實這個時候你本人並沒有坐在這個座位上.這種聲

明最典型的例子就是函數參數的聲明,例如:

void fun(int i, char c);好,這樣一解釋,我們可以很清楚的判斷:a)是定義;b)是聲明.

6. 在c語言中,所有函數調用之前都必須聲明,為什麼不對

#
include
"math.h"
#
include
<stdio.h>
void
get_equa(float
a,float
b,
float
c)
//注釋:聲明空類型float函數get_equa()
{
if(a==0.0)
//注釋:系數a的值為0的情況.
if(b==0.0)
//注釋:a值為0的情況下b也為0.
printf("data
error,
no
answer
to
show!");
//注釋:非一元二次方程式,列印「data
error...」
else
printf("the
equation
only
have
one
root:
%f",-c/b);
//注釋:列印唯一解.
else
{
double
disc,term1,term2,root_1,root_2,two_a;
//注釋:聲明必要double型變數.
//注釋:一元二次方程式的根有兩個,表達式這里不好寫,但數學上是這樣讀的:x
等於
2a
分之
負b
加減
根號下
b平方

4ac.(就是那個表達式的讀法.)
disc=b*b-4*a*c;
two_a=2*a;
term1=-b/two_a;
term2=sqrt(fabs(disc))/two_a;
//注釋:根號下b平方減4ac除以2a的值.
root_1=term1-term2;
root_2=term1+term2;
if(disc<0)
printf("the
equation
only
have
the
complex
root:\n
real
part
=%f,
imag
part
=%f",term1,term2);
//注釋:列印虛部和實部的值.
else
printf("the
equation
have
two
roots:\n
one
is
%f\n
another
one
is
%f",root_1,root_2);
//注釋:列印它的兩個實數根.
}
}
void
main()
{
float
a,b,c;
printf("please
input
your
equation's
a,b,c:\n");
scanf("%f%f%f",&a,&b,&c);
get_equa(a,b,c);
}
代碼測試通過。。有什麼不懂的可以問我。。嘿嘿。

7. C語言中,函數調用前是否必須需事先聲明

這個程序可以這樣分析,其實很簡單,首先你要添加上去#include<stdio.h>這個頭文件,其次你就這樣記憶:要是main()函數在被調用函數的前面,也就是像你所說的這樣情況的話,就必須在main()函數前面對被調用函數進行聲明才可以正常調用函數,不然編譯會出錯的,
如果被調用函數出現在在了main()函數的上面,也就是mian()函數和你現在max函數位置調換一下,那麼就不必對被調用函數進行聲明了,直接調用就可以了。

這樣的記憶比較清晰一點,我平時編程是將主函數寫在最後,前面寫被調用函數,這樣就避免了忘記寫函數聲明而編譯出錯,希望我的解答能夠幫助到你,

8. C語言,為什麼我寫的的這個函數沒有聲明,我也能調用呢

這個未聲明只是警告,是一種提醒,有些時候不會影響編譯,應該盡量可能避免。
以上代碼把第11行的內容復制在第1行、第2行之間,末尾再加個分號(;),就可以了,這就是函數的聲明。

9. C語言中在什麼情況下調用自定義函數前需要先聲明

編譯器是按順序編譯的,如果有以下情況:
void a()
{
b();//編譯器在這里還未編譯b(),所以此時函數b是不存在的。
}
void b()
{}
打個比方
int a=b; //報錯
int b=0;
其實是一個道理。
變數只能先定義再使用。