Nov 22, 2009 19:16
Спасибо Jonathan Caves из Visual C++ Compiler Team, я узнал, что в микрософтовском компиляторе inline (или __inline) заставляет линкер рассматривать функцию как слабую ссылку (типа weak в ARM-компиляторе) (если компилятор не решит действительно "заинлайнить" эту функцию). Но оказывается, можно сочетать __inline с __declspec(noinline). Тогда компилятору придется создать эту функцию, и можно будет, например, пользоваться пойнтером на нее. Таким образом, достаточно определить макро
#ifdef _MSC_VER
#define __weak __declspec(noinline) __inline
#endif
и можно будет писать, как для RVCT, что-то вроде
__weak int func(int arg){...}
программистское