[英]Return pointer from main
我想知道是否可以從c中的main函數返回指針地址。 這是一個很短的例子:
int main(){
int i = 0;
return &i; //won't work because of type difference and because i..
} //.. will be deallocated.
有沒有辦法做到這一點? 第二:我想這樣做是為了將堆對象從一個程序返回到另一個程序。
如果被調用的程序在main()上終止但是繼續在從main啟動的第二個線程上運行,是否可以使堆對象保持活動狀態?
提前致謝!
如果被調用的程序在
main()
上終止但是繼續在從main
啟動的第二個線程上運行,是否可以使堆對象保持活動狀態?
不它不是。 當你從main
返回時,它相當於調用exit
。 因此,程序終止。 之后沒有線程可以活着。
從C99標准:
5.1.2.2.3程序終止
1如果
main
函數的返回類型是與int
兼容的類型,則從初始調用到main
函數的返回等同於調用exit
函數,其中main
函數返回的值作為其參數;
您不能在嚴格符合的程序中返回它,也不能在大多數實現中返回它。
根據C11標准草案N1570,§5.1.2.2.1:
程序啟動時調用的函數名為
main
。 [...]應使用返回類型int
定義並且不帶參數:int main(void) { /* ... */ }
或者有兩個參數[...]:
int main(int argc, char *argv[]) { /* ... */ }
[...]或以其他一些實施方式定義的方式。
將指針移動到int
是可能的,但這將是實現定義的,可能是未定義的,並且......令人討厭。
如果被調用的程序在
main()
上終止但是繼續在從main
啟動的第二個線程上運行,是否可以使堆對象保持活動狀態?
一個程序就是程序。 main
運行在一個線程中。 堆內存在所有線程之間共享,所以是的,完全可以在線程之間共享堆內存。
但是, main
返回等同於程序終止,因此您需要找到另一種在線程之間共享它的方法。 一個例子是在一個線程中設置指向堆內存的指針(可能使該線程產生),並在其他線程中使用該指針。
我想這樣做是為了將堆對象從一個程序返回到另一個程序。
現在,進程或線程之間是什么? 堆內存在線程之間共享,但不在多個進程之間共享。 使用共享內存 ( mmap
或shmopen
, shmget
等)完成多個進程之間的共享 。
兩個問題:
當main
回歸時, i
不再存在; 您返回的任何指針值都將無效。
我不知道任何期望從任何執行的程序接收指針值的運行時環境; main
返回一個int
因為運行時環境需要一個int
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.