2011-04-02 33 views
1

これはC言語の質問です。C言語の*の意味

*は、以下の関数で*が乗算されるなどの意味ですか?私が尋ねる理由は、関数定義のコメントが3つのパラメータを期待しているからです。 #definesの中の() [括弧]も、かっことは違う意味ですか?下記参照。

関数コール:

nvm_eeprom_write_byte(TEST_ERASE_PAGE * EEPROM_PAGE_SIZE, 42); 

定義:関数定義のための

#define TEST_ERASE_PAGE 2 
#define EEPROM_PAGE_SIZE 32 

コメント:0とEEPROM_SIZE間

  • のparam page_addr EEPROMページアドレス、/ 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

はい、それだけで、この文脈で乗算を意味します。 nvm_eeprom_write_byte関数の最初の引数に2つの#define定数を掛けています。

このコードには、メモリアドレス操作に関する多くの前提があります。あなたがCを知らない場合は、EEPROMドライバコードを見ているのはおそらく、最も簡単で安全な方法ではないでしょうか。

+0

の違いを考えてみましょうか?私は他の人の仕事を理解しようとしています。私自身のコードを書くのではありません。 – milan

+1

@milan:2つのパラメータ、 'address'と' value'のように見えます。それぞれはカスタム型定義を使用して型指定されます。 –

+0

私は関数の上のコメントが間違っていると思いますか? – milan

2

はい、*#definemultiply

C.中括弧は、複合文(演算子優先事項)を使用する場合、予期しない結果を防ぐために、Cで標準的な方法であることを意味します。機能は3つのパラメータを期待しているのはなぜ

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

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

関数は3つのパラメータを期待しているのはなぜですか?私は他の人の仕事を理解しようとしています。私自身のコードを書くのではありません。 – milan

+0

3つのパラメータが必要ではありません。コメントは間違っています(ええ、それはたくさん起こります)。関数の定義には、 'eeprom_addr_t address'と' uint8_t value'という2つのパラメータしか必要ないと書かれています。 – misha

+0

ありがとうございます。 – milan

関連する問題