c中的*是什么意思

时间:2011-04-02 00:05:05

标签: 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 value 写入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)

2 个答案:

答案 0 :(得分:5)

是的,它只是意味着在这种情况下成倍增加。它将两个#defined常数相乘以构成nvm_eeprom_write_byte函数的第一个参数。

这段代码涉及很多关于内存地址操作的假设。老实说,如果你不懂C,看看EEPROM驱动程序代码可能不是最简单或最安全的启动方式。

答案 1 :(得分:2)

是的,*表示C中的multiply

#define中的括号是C中的标准做法,用于在使用复合语句时避免意外结果(运算符优先级很重要)。

考虑

之间的区别
#define FOO 1+2
int a = FOO*2

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