Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: IAR ARM, C. Что означает такая запись?
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
Dreamer
В демке, приложенной к отладочной плате, встретил вот такой код:
Код
#if __CORE__ < 7

inline __arm ExtCritSection(Save)
{
  unsigned long tmp;
  tmp = __get_CPSR();
  __set_CPSR(tmp & (Save | ~IRQ_FLAG));
}

#elif  __CORE__ == 7

inline void ExtCritSection(void)
{
  if(--CriticalSecCntr == 0)
  {
    asm("CPSIE i");
  }
}


По идее, это объявление функции (макрос на строку "ExtCritSection") не нашел, значит, это имя функции.
Но тогда каким образом компилятор съедает функцию, объявленную без типа возвращаемого значения и без типа аргумента?
Имеется в виду первая ветка препроцессора, в котрой выполняется условие(#if __CORE__ < 7).

К ключевому слову __arm нашел такое объяснение, оно, как я понял, не отменяет правило именования функций, а лишь указывает, что она исполняется в арм-режиме:
Цитата
The __arm keyword makes a function execute in ARM mode. An __arm declared function can, unless it is also declared __interwork, only be called from functions that also execute in ARM mode.
aaarrr
Это old-style объявление, по умолчанию будет использован тип int. C99 так делать уже запрещает, насколько я помню.
Dreamer
Цитата
Это old-style объявление, по умолчанию будет использован тип int

То есть это эквивалентно следующему объявлению?:
Код
inline __arm void ExtCritSection(int Save)
aaarrr
Цитата(Dreamer @ Aug 5 2009, 18:58) *
То есть это эквивалентно следующему объявлению?:

В данном случае да, хотя процедура может возвращать значение типа int, т.е. являться эквивалентом:
Код
inline __arm int ExtCritSection(int Save)
Dreamer
Спасибо.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.