这是一个C语言问题。
下面的函数*是否相乘?我问的原因是因为函数定义注释说它需要三个参数。 ()
中的#defines
[括号]是否意味着不同于括号?见下文。
函数调用:
nvm_eeprom_write_byte(TEST_ERASE_PAGE * EEPROM_PAGE_SIZE, 42);
定义:
#define TEST_ERASE_PAGE 2
#define EEPROM_PAGE_SIZE 32
函数定义的注释:
功能定义:
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)
答案 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