что означает * в с - PullRequest
       1

что означает * в с

1 голос
/ 02 апреля 2011

Это вопрос языка Си.

Значит ли * умножение или что-то еще в функции ниже?Причина, по которой я спрашиваю, состоит в том, что в комментариях к определению функции говорится, что ожидается три параметра.Кроме того, () [скобки] в #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.
  • параметр byte_addr адрес байта EEPROM, от 0 до EEPROM_PAGE_SIZE.
  • значение Значение байта для записи в 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 ]

5 голосов
/ 02 апреля 2011

Да, это просто означает умножение в этом контексте.Он умножает две константы #defined, чтобы сделать первый аргумент функции nvm_eeprom_write_byte.

Этот код включает в себя много предположений об обработке адресов памяти.Должен быть честным с вами, если вы не знаете C, то, глядя на код драйвера EEPROM, возможно, не самый простой или безопасный способ начать.

2 голосов
/ 02 апреля 2011

Да, * означает multiply в С.

Скобки в #define - это стандартная практика в C для предотвращения непредвиденных результатов при использовании составных операторов (где важен приоритет операторов).

Рассмотрим разницу между

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

и

#define FOO (1+2)
int a = FOO*2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...