我試圖在C
中編譯並運行下面的程序,但沒有main()
函數。我使用以下命令編譯了我的程序。編譯並運行沒有main()的程序在C中爲
gcc -nostartfiles nomain.c
而編譯器在警告
/usr/bin/ld: warning: cannot find entry symbol _start; defaulting to 0000000000400340
行,沒問題。然後,我已經運行可執行文件(a.out),兩個printf
語句打印成功,然後得到段錯誤。
所以,我的問題是,成功執行打印語句後爲什麼分段錯誤?
我的代碼:
#include <stdio.h>
void nomain()
{
printf("Hello World...\n");
printf("Successfully run without main...\n");
}
輸出:
Hello World...
Successfully run without main...
Segmentation fault (core dumped)
注:
這裏,-nostartfiles
GCC標誌鏈接
我很驚訝這項作品。坦率地說,我認爲鏈接器的這種處理方式是錯誤的(或者至少是一件壞事):沒有入口點,所以鏈接器只是讓它從任何函數都很方便而產生幻覺。布萊什。 – imallett
@imallett,至少該鏈接器足以引起人們對它的警告,並解釋它正在採取的回退行動!不過,你說得對,這可能更好,因爲錯誤而不僅僅是警告。 –
你爲什麼不用main? –