在C#中,在程序中使用指針(如下面程序所示),編譯時會出現“Unsafe code may only appear if compiling with /unsafe”的錯誤提示。本文談一下出錯原因和解決辦法。
public static void Main(string[] args) { int i = 99, y = 200; unsafe { swap(&i, &y); } Console.WriteLine("x is now {0},y is now {1}",i,y); } public static unsafe void swap(int *a, int *b) { int temp; temp = *a; *a = *b; *b = temp; }
1. 原因:
在寫任意一個C#程序的時候,一般都是在創建托管代碼。托管代碼是在Common Language Runtime (CLR)控制下執行,CLR使得程序員不需要管理內存和關心內存的分配和回收,有自動回收內存的機制。CLR也允許你寫非安全代碼 (unsafe code)。
非安全代碼就是不在 CLR 完全控制下執行的代碼,它有可能會導致一些問題,因此他們必須用 “unsafe” 進行表明,所以一般如果在C#中到用unsafe code非安全代碼的話,VS.NET中編譯就會出現“Unsafe code may only appear if compiling with /unsafe”的提示了,
2. 解決方法:
點項目屬性(Properties)->生成(Build)->常規(General)中:鈎上允許不安全代碼(Allow unsafe code)