- 论坛徽章:
- 0
|
我一直都用C++编译器的,现在开始用纯C写点东西,遇到不少问题,请教下大家,先谢谢。
我这现在有个宏
#define RX_GET_ELEM(ptr, elem_size, n) ((void*)((rx_byte*)ptr + ((n) * elem_size)))
我确实不太喜欢这种容易出错的东西用宏
我对static函数的理解就是在单独的编译单元内生成一份copy,所以链接时候两个同样的编译单元出现同样的符号就没问题了,例如
a.c和b.c内都定义了
static void test() { int x = 0; }
那么链接时候是不会出问题的。
但是我现在的做法是再一个公用的头文件内(例如:rx_misc.h)声明并定义
static void* RX_GET_ELEM(void *ptr, size_t elem_size, size_t idx)
{
return ((void*)((rx_byte*)ptr + ((idx) * elem_size)));
}
我之所以认为它们可以取代inline的做法是因为一般编译器做函数展开的前提是此函数的定义在编译单元内可见,例如我这个在头文件上定义的函数就是这样的,vc8也确实可以做优化。
请问这样做是不是可行的?
btw:因为我不用inline的目的也是希望它们在编译器间移植
即使编译器不能做优化,至少它应该保证我这么定义永远是可以编译通过的
[ 本帖最后由 Solidus 于 2008-1-26 18:44 编辑 ] |
|