當前位置:首頁 » 編程語言 » c語言中能否不調用main函數
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言中能否不調用main函數

發布時間: 2022-10-24 14:25:36

㈠ 每個c程序文件都必須有一個main()函數

每個c程序文件都必須有一個main()函數.

當一個程序只能作為另一個程序的子程序的時候,那麼該程序沒有主函數。主函數的位置不固定, 並且可以調用程序中的其他函數 , 而其他函數不可以調用 main() 函數 。 函數中不可以再定義其他的函數。

1、main函數是程序唯一入口。也就是說,程序運行時,首先從main函數開始執行。

2、一個程序,必須要有一個main函數,而且也只能有一個main函數。

(1)c語言中能否不調用main函數擴展閱讀:

C編譯器允許main()函數沒有參數,或者有兩個參數(有些實現允許更多的參數,但這只是對標準的擴展)。這兩個參數,一個是int類型,一個是字元串類型。第一個參數是命令行中的字元串數。按照慣例(但不是必須的),這個int參數被稱為argc(argument count)。

第二個參數是一個指向字元串的指針數組。命令行中的每個字元串被存儲到內存中,並且分配一個指針指向它。按照慣例,這個指針數組被稱為argv(argument value)。

系統使用空格把各個字元串格開。一般情況下,把程序本身的名字賦值給argv[0],接著,把最後的第一個字元串賦給argv[1],等等。

㈡ c語言中不用main函數

這屬於C編譯器的問題。C編譯器將main()視為程序的入口標號,因為ISO對C語言標准化的關系,使得開發出的編譯器也必須遵守ISO標准。 當然如果你自己能寫C編譯器,把入口函數改為其它也是可行的,只不過不能被國際所認同。

㈢ c語言中是不是必須要有main函數

c++中為什麼需要main函數的解釋如下:
1、這個是由系統的C++運行時決定的,編譯器生成目標系統上的可執行文件時,操作系統啟動的入口就是C++運行時(C++ runtime system), 然後運行時完成初始化之後會調用main函數。
2、main函數定義了函數調用的入口,具體用法如下:
(1)main()函數及其參數
C++標准允許主函數main()有或沒有參數列表。 您能在主函數main()中使用一個或更多的參數。 如下是一些慣例:
int main(int argc, char *argv[])
第一個參數argc,指明有多少個參數將被傳遞給主函數main(),真正的參數以字元串數組(即第2個參數argv[])的形式來傳遞。每一個字元串均有自己意思。在這句法上面, 記住, argc代表參數的數量, main()函數本身是在索引0為的第一參數。
(2)所以, argc總是至少為1 。它的總數是從argv列陣的元素數目。 這意味著, argv[0]的值是至關重要的。 如果用戶在控制台環境中程序名稱後鍵入含參數的指令, 那麼隨後的參數將傳遞給argv[1] 。 例如, 如果程序名稱為main,並且已經事先編譯好了,這時如果用戶鍵入:D:/MyPrograms/AConsoleApp/main 68
值68將會傳遞給argv[1]
當然取決於你怎麼樣來編寫程序了,也許你的用戶將可以輸入如下指令:
D:/MyPrograms/AConsoleApp/main 68 1250.50
因為參數argv是一些字元串,將這些字元串轉換為你需要的值就是我們程序員的任務了。

㈣ 在C語言程序中,被調用的函數必須在main( )函數中定義 這句話對嗎、、、

不對。C語言中函數可以定義在main()函數外面,如下列代碼中定義的swap函數,就是在main()函數外面。

示例代碼:

#include<stdio.h>

void swap(int *a,int *b){

int t;

t = *a;

*a = *b;

*b = t;

}

int main(){

int a=23,b = 43;

printf("輸入的兩個要交換的數為:%d,%d ",a,b);

swap(&a,&b);

printf("交換後的數為:%d,%d ",a,b);

return 0;

}

程序運行結果:

(4)c語言中能否不調用main函數擴展閱讀

對於C 程序而言,它所有的命令都包含在函數內。每個函數都會執行特定的任務。有一個特別的函數,名稱為main()——該函數是程序啟動後,第一個執行的函數。其他所有函數都是 main()函數的子函數(或者與之相關聯的過程,例如回調函數),並且它們的函數名稱可以自己設定。

㈤ c語言到底是不是必須要有main函數

C語言必須要有一個main函數,而且只能有一個main函數,這個函數叫主函數,它是第一個運行的函數。

一般來說,主函數應放在最後,其他被調用函數放在主函數前面。這樣的話,其他被調用函數可以不予先聲明。如果其他被調用函數放在了主函數後面,則在主函數之前一定要事先對被調用函數加以聲明。

㈥ main函數 在每個c語言程序中都是必須的嗎

C語文程序中必須有main()函數。

C的設計原則是把函數作為程序的構成模塊。main()函數稱之為主函數,一個C程序總是從main()函數開始執行的。

一、main()函數的形式
在最新的 C99 標准中,只有以下兩種定義方式是正確的:

int main( void ) /* 無參數形式 */
{
...
return 0;
}

int main( int argc, char *argv[] ) /* 帶參數形式 */

{
...
return 0;
}
int指明了main()函數的返回類型,函數名後面的圓括弧一般包含傳遞給函數的信息。void表示沒有給函數傳遞參數。關於帶參數的形式,我們等會討論。

瀏覽老版本的C代碼,將會發現程序常常以main()這種形式開始。C90標准允許這種形式,但是C99標准不允許。因此即使你當前的編譯器允許,也不要這么寫。

你還可能看到過另一種形式。
void main()

有些編譯器允許這種形式,但是還沒有任何標准考慮接受它。C++ 之父 Bjarne Stroustrup 在他的主頁上的 FAQ 中明確地表示:void main( ) 的定義從來就不存在於 C++ 或者 C 。所以,編譯器不必接受這種形式,並且很多編譯器也不允許這么寫。
堅持使用標準的意義在於:當你把程序從一個編譯器移到另一個編譯器時,照樣能正常運行。

二、main()函數的返回值
從前面我們知道main()函數的返回值類型是int型的,而程序最後的 return 0; 正與之遙相呼應,0就是main()函數的返回值。那麼這個0返回到那裡呢?返回給操作系統,表示程序正常退出。因為return語句通常寫在程序的最後,不管返回什麼值,只要到達這一步,說明程序已經運行完畢。而return的作用不僅在於返回一個值,還在於結束函數。

現在我們來做一個小試驗來觀察main()函數的返回值。編寫如下代碼並編譯運行:
//a.c
#include "stdio.h"
int main(void)
{
printf("I love you.");
return 0;
}
將這個文件保存為a.c,編譯運行後會生成一個a.exe文件。現在打開命令提示符,在命令行里運行剛才編譯好的可執行文件,然後輸入 echo %ERRORLEVEL% ,回車,就可以看到程序返回 一個0 。如果把 return 0; 改為 return 99; ,那麼很顯然,再次執行上述步驟以後你可以看到程序返回99。要是你這樣寫 return 99.99; 那還是返回99,因為99.99被傳給操作系統之前,被強制類型轉換成整數類型了。

現在,我們把a.c改回原來的代碼,然後再編寫另一個程序b.c:
//b.c

#include "stdio.h"
int main(void)
{
printf("I』m too.");
return 0;
}
編譯運行後打開命令提示符,在命令行里輸入a&&b 回車,這樣你就可以看到《人鬼情未了》裡面經典的愛情對白:
I love you.

I』m too.

&& 的含義是:如果 && 前面的程序正常退出,則繼續執行 && 後面的程序,否則不執行。所以,要是把a.c裡面的 return 0; 刪除或者改為 return 99; ,那麼你只能看到 I love you. 。也就是說,程序b.c就不執行了。現在,大家該明白 return 0; 的作用了吧。

三、main()函數的參數
C編譯器允許main()函數沒有參數,或者有兩個參數(有些實現允許更多的參數,但這只是對標準的擴展)。這兩個參數,一個是int類型,一個是字元串類型。第一個參數是命令行中的字元串數。按照慣例(但不是必須的),這個int參數被稱為argc(argument count)。大家或許現在才明白這個形參為什麼要取這么個奇怪的名字吧,呵呵!至於英文的意思,自己查字典吧。第二個參數是一個指向字元串的指針數組。命令行中的每個字元串被存儲到內存中,並且分配一個指針指向它。按照慣例,這個指針數組被稱為argv(argument value)。系統使用空格把各個字元串格開。一般情況下,把程序本身的名字賦值給argv[0],接著,把最後的第一個字元串賦給argv[1],等等。

現在我們來看一個例子:

//c.c

#include "stdio.h"
int main(int argc, char *argv[])
{
int count;
printf("The command line has %d arguments:
", argc - 1);
for(count = 1; count < argc; count++)
printf("%d: %s
", count, argv[count]);
return 0;
}
編譯運行,在命令行輸入c I love you 回車,下面是從命令行運行該程序的結果:

The command line has 3 arguments:

1:I

2:love

3:you

從本例可以看出,程序從命令行中接受到4個字元串(包括程序名),並將它們存放在字元串數組中,其對應關系:

argv[0] ------> c(程序名)

argv[1] ------> I

argv[2] ------> love

argv[3] ------> you

至於argc的值,也即是參數的個數,程序在運行時會自動統計,不必我們操心。

這個例子中,每個字元串都時一個單詞(字母),那既然是字元串,要把一句話當作參數賦給程序該怎麼辦?你可以在命令行里這樣輸入 c "I love you." "I』m too."。程序運行結果:

The command line has 2 arguments:

1:I love you.

2:I』m too.

其對應關系:

argv[0] ------> c(程序名)

argv[1] ------> I love you.

argv[2] ------> I』m too.

要注意的是,你在命令行的輸入都將作為字元串形式存儲於內存中。也就是說,如果你輸入一個數字,那麼要輸出這個數字,你應該用%s格式而非%d或者其他。

再來看一個例子:

//d.c
#include "stdio.h"
int main(int argc, char *argv[])
{
FILE *fp;
fp = fopen(argv[1], "w");
fputs("I love you.", fp);
fclose(fp);
return 0;
}
編譯運行,打開命令行並輸入d love.txt 回車。這樣,打開d.c文件所在的目錄,你會發現多了一個名為 love.txt 的文件,打開後裡面的內容正是世界上說的最多的那句話。

當然,你可能會說我不需要使用命令行參數就可以做到這些。是的,你當然可以。使用命令行參數的理由或許就是練習命令行用法,以備以後需要編寫基於命令行的程序。還有一個好處是,不需要C環境就可以運行已經編譯好的程序。比如,你把上面那個程序編譯後生成的d.exe發給你的女朋友,再告訴她怎麼運行,這樣,你的女朋友可以用另一種方式體會到你對她的濃情蜜意。

參考:http://c.biancheng.net/cpp/html/725.html

㈦ c語言 為什麼不允許調用main函數

main函數是系統特殊函數,由操作系統在啟動一個進程時調用,操作為進程分配好資源之後,就調用程序的main函數 開始執行,main函數執行的線程叫主線程。主線程具有特殊意義,某些平台,比如windows ios 對主線程特別的限制,比如說界面更新操作都只能在主線程裡面完成等等。

如果你自己調用main函數,那你的代碼是從哪裡執行來的呢?還不是從main函數執行來的,所以不允許沖突。

系統某些特殊的函數,特殊對象,特殊的ID有很多。
比如特殊函數 main 。
比如特殊對象 C++裡面的cin,cout
特殊的ID,比如不允許佔用1000的網路埠,1000一下的埠是系統使用的。

就像你不能定義一個變數 叫 class if break等等,他們都是關鍵字,不允許沖突一樣。

㈧ C程序中是不是一定要有main函數

C程序中不一定要有main函數。

C語言一共只有32個關鍵字,9種控制語句,程序書寫自由,主要用小寫字母表示。它把高級語言的基本結構和語句與低級語言的實用性結合起來。 C 語言可以象匯編語言一樣對位、位元組和地址進行操作, 而這三者是計算機最基本的工作單元。

(8)c語言中能否不調用main函數擴展閱讀

C的運算符包含的范圍很廣泛,共有種34個運算符。C語言把括弧、賦值、強制類型轉換等都作為運算符處理。

C的數據類型有:整型、實型、共用體類型等。能用來實現各種復雜的數據類型的運算。並引入了指針概念,使程序效率更高。另外C語言具有強大的圖形功能, 支持多種顯示器和驅動器。且計算功能、邏輯判斷功能強大。

㈨ c語言中不用main函數

這屬於C編譯器的問題。C編譯器將main()視為程序的入口標號,因為ISO對C語言標准化的關系,使得開發出的編譯器也必須遵守ISO標准。
當然如果你自己能寫C編譯器,把入口函數改為其它也是可行的,只不過不能被國際所認同。

㈩ 在C語言程序中,要調用的函數必須在main()函數中定義。 這句話錯在哪裡

函數准確來說就是通過一系列的計算得到一個返回值,如果沒有返回值的可以視為返回值為空,因此,你可以把函數看成一種類型的變數。
系統調用任何東西都是通過調用main函數做的。如果你的對函數的定義在main函數之前,那麼編譯的時候在main函數裡面調用,就會查找之前有沒有定義。之後有沒有他是不知道的。
如果沒有定義,那麼你可以先聲明下。你可以把聲明看成一個main之前還沒有實現的函數的佔位符。這個佔位符告訴你函數的參數和返回值。