2011-04-02 66 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