2013-06-20 70 views
-1

我是一名python開發人員。我正在學習C編程語言。我已經介紹了大部分基礎知識,並慢慢轉向C的高級用法。我有以下問題。有關C編程的一般問題

  1. 在C中,#ifndef _obj_h基於我們使用的下劃線。例如。如果我的頭文件是obj.h,那麼我會用它作爲_obj_h。如果我有一個名爲my_test_header.h的頭文件,該怎麼辦?我會用它作爲_my_test_header_h?這裏的命名約定是什麼?

  2. C99是否允許即時初始化,例如, for(int i = 0 ....)?我的編譯器拋出錯誤。但在許多書中它被定義爲合法的。

  3. 請分享任何優秀的C編程高級應用資源,討論開發策略和語言使用。

+0

順便說一句,你可以在最後一個問題前至少插入一個「please」...... – 2013-06-20 18:40:59

+0

第三個問題是題外話題,但這裏有:閱讀編碼標準參考,例如MISRA -C或類似的。 (成本錢,有人可以提出一個免費的替代方案嗎?)它們包含了很多用於編寫安全關鍵C代碼的「最佳實踐」,其中很多都是一般的良好實踐。 –

+0

MISRA是否有用?那天我正在開發一個項目,它似乎充滿了瘋狂的東西。然而,我從來沒有閱讀過這個規範,只是聲稱遵守這個規範。 –

回答

2
  1. 首要的和最重要的命名約定是不使用相同的標點符號!!!!!!!!的多個連續實例

除了通常的煩惱之外:以下劃線開頭的標識符保留給實現。不要使用它們。此外,預處理器宏一般被寫在ALL_CAPS以便他們能夠從正常識別,功能,容易辨別等,所以寫你包括警衛這樣的:

#ifndef MYHEADER_H 
#define MYHEADER_H 

/* ... */ 

#endif 

C99它允許正是時候初始化像例如for(int i = 0 ....)?我的編譯器拋出錯誤。但在許多書中它被定義爲合法的。

然後告訴你的編譯器使用C99。也許試試-std=c99,適用於GCC和clang(但它不應該是clang,它默認爲C99模式)。

分享任何有用的C編程優秀資源,討論開發策略,用法。

(But you may want to format and indent your code...)

+0

默認情況下,clang會在C99模式下編譯。 –

+0

@CarlNorum是的,可能是OP使用GCC或者一些不符合MSVC標準的混蛋。 – 2013-06-20 18:39:17

+0

OP的個人資料頁面顯示印度 - 根據我的經驗,大多數初學者都被迫使用Turbo-C++。 BARF。 –

1
  1. 不要使用前導下劃線在所有 - 以下劃線開始保留用於執行文件範圍標識符標識。人們仍然在代碼中做了很多事情,但他們可能不應該這樣做。

    標準參考7.1.3保留的標識符

    - 以下劃線開頭的所有標識符,始終保留用作與兩個普通和標記的名稱空間文件範圍的標識符。

  2. 是的,這是允許的。你的編譯器太舊了,或者你沒有通過正確的標誌來編譯C99或C11模式。

  3. 堆棧溢出的問題。

0
  1. 在C「_」下劃線只是用來做簡單的區分每個名字,它需要滿足SM倍的規則是唯一的,這樣v使用下劃線 2.ya你可以使用這種格式但編譯器shd更新 3.google是最好的一個