关于C语言的语法中类型转换的一个问题。求教C语言高手。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于C语言的语法中类型转换的一个问题。求教C语言高手。相关的知识,希望对你有一定的参考价值。

在Lua语言的源代码中有如下宏定义:
#define UNUSED(x) ((void)(x)) /* to avoid warnings */
有如下用法:
static void f_luaopen (lua_State *L, void *ud) global_State *g = G(L);// get global_State ptr saved in lua_State UNUSED(ud);// 这一句看不懂,求指导~ stack_init(L, L); /* init stack */ sethvalue(L, gt(L), luaH_new(L, 0, 2)); /* table of globals */ sethvalue(L, registry(L), luaH_new(L, 0, 2)); /* registry */ luaS_resize(L, MINSTRTABSIZE); /* initial size of string table */ luaT_init(L); luaX_init(L); luaS_fix(luaS_newliteral(L, MEMERRMSG)); g->GCthreshold = 4*g->totalbytes;
我不知道上面函数中第二句的作用。求指教!谢谢!

参考技术A 有误吧?UNUSED的宏定义是变量类型,而代码中UNUSED(ud)的ud是指针啊!如果宏定义是#define UNUSED(x) ((void *)(x))的话就正确了。 参考技术B #define UNUSED(x) ((void)(x)) 这是宏定义 在编译的时候 把UNUSED(x)替换为((void)(x))编译
就像#define PI 3.14一样
所以那句在编译的时候按照((void)(ud))编译追问

谢谢您的回答!

我能理解您的意思。但是单独的一行转换

((void)ud);

有什么意义呢?

下面是源代码:

追答

你注释说的很清楚了 避免警告 如果ud只定义不使用 编译时就会有警告 单独这一句就是为了使用它 避免警告 你可以把这句注释掉再编译试试 比较不同

追问

学习了!谢谢您!

本回答被提问者采纳

关于C语言数据类型转换的一个小问题,很简单哦!!

chara;intb;floatc;doubled; 则表达式a*b+c-d值的类型是什么? 请解释一下原理啊,谢谢

参考技术A 数据类型转换有两种:
a强制类型转换,通过函数实现,如
charc='a';inti;i=int(a);//强制转换,但不会改变a本身的类型。
b自动类型转换,通过编译器自动实现,
不同类型的数据在一个表达式中会自动转换为最长的类型:
如你定义的chara;intb;floatc;doubled;
计算a*b+c-d时,按计算顺序说明类型转换:
1a*b//char类型的a转换为int类型的值,再和int类型的b相乘
2a*b+c//int类型的a*b转换为float类型值,再和float类型的c相加
3a*b+c-d//float类型的(a*b+c)转换为double类型的值,再和double类型的d相减
不考虑过程,最终表达式的值为最长类型(这里是double)的值

以上是关于关于C语言的语法中类型转换的一个问题。求教C语言高手。的主要内容,如果未能解决你的问题,请参考以下文章

关于C语言数据类型转换的一个小问题,很简单哦!!

c语言中关于结构体 调用函数的问题 新手求教

C语言各个数据类型取值范围

c语言 所有类型转换函数

关于强制类型转换(c语言)

通过C学Python关于语言数值类型和变量