2011-04-02 80 views
1

這是一個C語言問題。什麼是*是指在C

是否意味着*乘或東西在以下功能別的嗎?我問的原因是因爲函數定義註釋說它期望三個參數。 #defines中的() [括號]是否表示不同於沒有括號的東西?見下文。

函數調用:

nvm_eeprom_write_byte(TEST_ERASE_PAGE * EEPROM_PAGE_SIZE, 42); 

的定義:

#define TEST_ERASE_PAGE 2 
#define EEPROM_PAGE_SIZE 32 

評論對函數定義:

  • PARAM page_addr EEPROM頁地址,0和EEPROM_SIZE之間/ EEPROM_PAGE_SIZE。
  • PARAM byte_addr EEPROM字節地址,0和EEPROM_PAGE_SIZE之間。
  • PARAM 字節值寫入EEPROM中。

函數定義:

void nvm_eeprom_write_byte(eeprom_addr_t address, uint8_t value) {} 

eeprom_addr_t是一個typedef:

typedef uint16_t eeprom_addr_t 
#define EEPROM_START  (0x0000) 
#define EEPROM_SIZE  (2048) 
#define EEPROM_PAGE_SIZE (32) 
#define EEPROM_END  (EEPROM_START + EEPROM_SIZE - 1) 

回答

5

是的,它只是意味着乘在這方面。它乘以兩個#defined常量,使nvm_eeprom_write_byte函數的第一個參數。

該代碼涉及到很多關於內存地址操縱的假設。如果你不瞭解C,那麼對你誠實一點,看看EEPROM驅動代碼可能不是最簡單或最安全的方法。

+0

之間的差異爲什麼函數期待三個參數?我試着去了解別人的工作,而不是寫我自己的代碼。 – milan 2011-04-02 00:10:30

+1

@milan:看起來像兩個參數:'地址'和'值'。它們中的每一個都使用自定義typedef鍵入。 – 2011-04-02 00:11:56

+0

我猜這個函數上面的註釋是不正確的呢? – milan 2011-04-02 00:14:13

2

是,*指C.

multiply

圓括號中#define是在C標準實踐使用複合語句(其中算符優先事項)時,以防止意外的結果。

考慮

#define FOO 1+2 
int a = FOO*2 

#define FOO (1+2) 
int a = FOO*2 
+0

爲什麼函數需要三個參數?我試着去了解別人的工作,而不是寫我自己的代碼。 – milan 2011-04-02 00:11:03

+0

它不期待3個參數。評論是錯誤的(是的,它發生了很多)。函數定義說只需要兩個參數:'eeprom_addr_t address'和'uint8_t value'。 – misha 2011-04-02 00:14:06

+0

謝謝你的幫助。 – milan 2011-04-02 00:20:30