pragma預處理指令詳解

2021-04-07 09:19:17 字數 793 閱讀 6280

用#pragma data_seg建立乙個新的資料段並定義共享資料,其具體格式為:

#pragma data_seg ("shareddata")

hwnd sharedwnd=null;//共享資料

#pragma data_seg()

1,#pragma data_seg()一般用於dll中。也就是說,在dll中定義乙個共享的,有名字的資料段。最關鍵的是:這個資料段中的全域性變數可以被多個程序共享。否則多個程序之間無法共享dll中的全域性變數。

2,共享資料必須初始化,否則微軟編譯器會把沒有初始化的資料放到.bss段中,從而導致多個程序之間的共享行為失敗。

3。如果在乙個dll中這麼寫:

#pragma data_seg("mydata")

int g_value; // note that the global is not initialized.

#pragma data_seg()

dll提供兩個介面函式:

int getvalue()

void setvalue(int n)

然後啟動兩個程序a和b,a和b都呼叫了這個dll,假如a呼叫了setvalue(5); b接著呼叫int m = getvalue(); 那麼m的值不一定是5,而是乙個未定義的值。因為dll中的全域性資料對於每乙個呼叫它的程序而言,是私有的,不能共享的。假如你對g_value進行了初始化,那麼g_value就一定會被放進mydata段中。換句話說,如果a呼叫了setvalue(5); b接著呼叫int m = getvalue(); 那麼m的值就一定是5!這就實現了跨程序之間的資料通訊!

pragma 預處理指令詳解

pragma 預處理指令詳解 在所有的預處理指令中,pragma 指令可能是最複雜的了,它的作用是設定編譯器的狀態或者是指示編譯器完成一些特定的動作。pragma指令對每個編譯器給出了乙個方法,在保持與c和c 語言完全相容的情況下,給出主機或作業系統專有的特徵。依據定義,編譯指示是機器或作業系統專有...

pragma 預處理指令詳解

7 pragma comment 該指令將乙個注釋記錄放入乙個物件檔案或可執行檔案中。常用的lib關鍵字,可以幫我們連入乙個庫檔案。每個編譯程式可以用 pragma指令啟用或終止該編譯程式支援的一些編譯功能。例如,對迴圈優化功能 pragma loop opt on 啟用 pragma loop o...

pragma 預處理指令詳解

在所有的預處理指令中,pragma 指令可能是最複雜的了,它的作用是設定編譯器的狀態或者是指示編譯器完成一些特定的動作。pragma指令對每個編譯器給出了乙個方法,在保持與c和c 語言完全相容的情況下,給出主機或作業系統專有的特徵。依據定義,編譯指示是機器或作業系統專有的,且對於每個編譯器都是不同的...