求教关于数值与字符串转换解决办法

求教关于数值与字符串转换
比如一个int数值,转换为char   *,我们可以这样:
sprintf(str,   "%d ",   i);

可是如果数值是pid_t,   size_t等等,却又如何用通用的方法转换,
通过查询我现在使用的操作系统(for   x86)头文件,可以得知pid_t   ==   int,   size_t   ==   unsigned   int
那么也可以这么转换
sprintf(str,   "%d ",   pid);
sprintf(str,   "%u ",   size);

可是这种死代码不具有移植性,如果机器换成16位或者64位,代码可能就会出错,

现在请问各位老大,如何写出具有移植性的代码,通常这种情况你们是如何处理的?

顺便提一下,   我看到一些软件在configure时,会测试数值的长度,但是只是看到表面,
具体如何处理还不知道,可否告知,但是感觉这种方法比较麻烦,有没有比较简单通用的方法?


------解决方案--------------------
宏定义啊


------解决方案--------------------
只能自己封装一下了,除此没有完美的解决方案。
C不支持重载,也就没有自动的根据参数的实际类型去选择一个正确函数执行的能力。
------解决方案--------------------
移植对size_t pid的类型重新定义
或者自己定义定义一套数据类型
简单可以参考ucosII中类型定义
------解决方案--------------------
用C++
------解决方案--------------------
利用 宏 define 增强移植性,
但是还是在少数情况下会出现问题 ~
------解决方案--------------------
宏定义可以试一试

大概的我觉得。。 include/linux/list.h当中的 list_entry的定义好像可以
------解决方案--------------------

#include <STDIO.H>
#include <STDLIB.H>
#include <MEMORY.H>


typedef enum data_type_T
{
DATA_TYPE_int = 1,
DATA_TYPE_ushort = 2,
DATA_TYPE_float = 3
}data_type;

typedef struct data_str_T
{
data_type m_type;
union
{
int m_data_int;
unsigned short m_data_ushort;
float m_data_float;
}m_data;
}data_str;

void int2str(char *pStr, data_str outData)
{
if (pStr == NULL)
{
return;
}

switch (outData.m_type)
{
case DATA_TYPE_int:
sprintf(pStr, "%d ", outData.m_data.m_data_int);
break;
case DATA_TYPE_ushort:
sprintf(pStr, "%u ", outData.m_data.m_data_ushort);
break;
case DATA_TYPE_float:
sprintf(pStr, "%f ", outData.m_data.m_data_float);
break;
default:
pStr[0] = '\0 ';
break;
}
}

int main(void)
{
data_str test_data;
char strOut[200];
int test_int = 78;
unsigned short test_ushort = 67;
float test_float = 3.456f;

test_data.m_type = DATA_TYPE_int;
test_data.m_data.m_data_int = test_int;
int2str(strOut, test_data);
printf( "\nNum: %d, String: %s ", test_int, strOut);

test_data.m_type = DATA_TYPE_ushort;
test_data.m_data.m_data_ushort = test_ushort;
int2str(strOut, test_data);
printf( "\nNum: %u, String: %s ", test_ushort, strOut);

test_data.m_type = DATA_TYPE_float;
test_data.m_data.m_data_float = test_float;
int2str(strOut, test_data);
printf( "\nNum: %f, String: %s ", test_float, strOut);

return 0;
}