2013-01-18 117 views
5

我想了解如何在C代碼中使用const。首先,我並沒有真正打擾它的使用,但後來我看到了很多使用const的例子。我應該努力回去虔誠地做出合適的變數const?或者我只是在等待我的時間?如何最好地在C中使用const關鍵字?

我想這會讓讀取哪些變量更容易,尤其是在函數調用中,對人類和編譯器來說更是如此。我是否錯過了其他重要的觀點?

+1

無論如何,一切都是變數。正如你所說,const只是一個提示,指定的值不應該改變。但你可以擺弄指針,而不需要改變編譯器背後的值:http://stackoverflow.com/questions/3801557/can-we-change-the-value-of-a-constant-through-pointers –

+0

相關:[關於const正確性賣給我](http://stackoverflow.com/questions/136880/sell-me-on-const-correctness)(它是C++,但也與C有關)。 – netcoder

+0

我不打擾回到工作的應用程序,你完成了。如果你有庫,使它們使用'const'並不壞。有些時候你不得不放棄。例如'const'和多維數組真的非常合作。 – Shahbaz

回答

5

const鍵入#define宏是不是。

const作用域爲C塊,#define作用於文件。

const對參數傳遞最有用。如果您看到在帶指針的原型上使用const,則知道傳遞數組或結構是安全的,因爲函數不會改變它。沒有const它可以。

看看如strcpy()的定義,你會明白我的意思。一開始就將「常量」應用於函數原型。複雜的裝修const並不像「很多工作」那麼困難(但如果按小時計算,還可以)。

還認爲:

const char *s = "Hello World"; 
char *s = "Hello World"; 

這是正確的,爲什麼?

+0

所以在你的例子中,我假設我不能在第一行中更改'「Hello World」'部分(但我可以完全指向其他字符串),那是正確的嗎?我在這裏和那裏也看到了這種符號,是字符串(即'char'數組)應該如何實例化? – c00kiemonster

+0

@ c00kiemonster:如果內容可以修改,不要使它成爲'const'。但在上面的例子中,''* *是一個常量,所以不能修改。 –

+1

@ c00kiemonster:是的,第一個例子,'const'是正確的。第二個例子不正確,但不幸的是很常見。這將導致嘗試改變只讀內存(崩潰!)。很久以前,Visual Studio 5都採用了這種方法,並給出了一些「有趣」的效果。 – cdarke

1

使用const不僅是一種很好的做法,而且提高了代碼的可讀性和可理解性,並有助於防止出現一些常見錯誤。肯定在適當的時候使用const。

6
How do I best use the const keyword in C? 

使用const當你想讓它的 「只讀」 。就這麼簡單:)