C語言中main函式之前可以進行賦值作嗎?

2021-06-26 17:25:37 字數 932 閱讀 5812

這兩天用結構模擬物件導向的方法在c語言中編寫硬體的驅動程式,涉及到多檔案的變數的初始化問題。如下:

在ds1302.h中定義了乙個結構:

typedef structds1302_t;

extern ds1302_t ds1302;

並宣告了乙個全域性變數以供main函式所在的main.c檔案呼叫,並在ds1032.c中定義該變數:

ds1302_t ds1302;

隨後在ds1032.c中初始化:

ds1302=;//其中fun1和fun2為之前定義好的函式,作為結構成員。但在初始化之前卻怎麼也通不過,提示錯誤為重複定義。百思不得其解。

最後用vc新建了乙個簡單的程式(test.c)

#include

typedef structstudent;  

student s1;

s1.a=0;

void main()

上述檔案編譯也通不過,而且提示是一樣的,重複定義,仔細思考才發現:原來自己是在main函式之前對變數進行賦值語句操作。main函式之前是用來宣告和定義全域性變數和函式的,並由編譯器進行預處理,給那些全域性變數和定義的函式分配記憶體和位址,  不能設計可執行**。

編譯器在編譯階段對main函式之前的全域性變數進行記憶體分配,對定義的函式生成可執行的**,並保留該函式的位址以供main函式呼叫,而賦值語句操作是一句可執行**,又沒有類似函式指標的東西供main函式呼叫,所以只能放在main函式內部進行順序執行。

在多檔案組織中,只有在包含main函式的原始檔裡面的main函式內部才能對變數進行賦值語句的操作,而其它不包含main的原始檔這不能進行變數的賦值操作,只能進行變數的宣告。

但並不是說在main函式之前就不能對變數進行初始化賦值:可以在定義變數的時候對變數進行初始化賦值。如下:

int a=10;

student s1=;

這些都是可以。

C語言中main函式的引數

我們經常用的main函式都是不帶引數的。因此main 後的括號都是空括號。實際上,main函式可以帶引數,這個引數可以認為是 main函式的形式引數。語言規定main函式的引數只能有兩個,習慣上這兩個引數寫為argc和argv。因此,main函式的函式頭可寫為 main argc,argv 語言還規...

C語言中main函式的引數

我們經常用的main函式都是不帶引數的。因此main 後的括號都是空括號。實際上,main函式可以帶引數,這個引數可以認為是 main函式的形式引數。語言規定main函式的引數只能有兩個,習慣上這兩個引數寫為argc和argv。因此,main函式的函式頭可寫為 main argc,argv 語言還規...

c語言中的main函式討論

從剛開始寫c程式,相比大家便開始寫main 了。雖然無數的教科書和老師告訴我們main是程式的入口。那麼main函式是怎麼被呼叫的,怎麼傳入引數,返回的內容到 了,返回的內容是什麼?接下來我們來 一下這個問題。main 函式的形式 早期教材這麼寫 void main 其實翻翻c c 標準,從來沒有定...