作者:Yx宵夜 | 来源:互联网 | 2022-12-02 17:09
我正在寻找一种在C中有一个函数的方法,它接受一个定义特定变量类型的字符串作为输入.然后,该函数返回该sizeof
输入的结果,就好像该字符串被评估为一个类型一样.考虑下面的例子.
#include
typedef struct my_struct {
int16_t var1;
int16_t var2;
int16_t var3;
} mystruct_t;
int main(int argc, char * argv[])
{
return sizeof(argv[1]); // THIS IS WRONG!!
}
然后用户可以编译它并尝试调用./myprogram my_struct_t
我希望my_struct_t
在运行时在我的机器上返回实际C字节大小的位置.
我不确定的部分是显然这会得到存储在其中的(指向)字符串argv[1]
的大小,而不是字符串定义的类型的大小.我怎样才能进行这种转换?这甚至可能吗?
1> Paul..:
您可以使用一系列if语句来完成它.为要允许调用者指定的每种类型添加一个:
#include
#include
typedef struct my_struct {
int16_t var1;
int16_t var2;
int16_t var3;
} my_struct_t;
int main(int argc, char * argv[])
{
const char * str;
if ( argc <= 1 )
return -1;
str = argv[1];
if ( 0 == strcmp( str, "int" ) )
return sizeof( int );
if ( 0 == strcmp( str, "int16_t" ) )
return sizeof( int16_t );
if ( 0 == strcmp( str, "struct my_struct" ) )
return sizeof( struct my_struct );
if ( 0 == strcmp( str, "my_struct_t" ) )
return sizeof( my_struct_t );
return -1;
}