演员是否会在C中失败?

时间:2015-10-07 03:26:22

标签: c types casting

具体来说,我的问题是,给定这个宏:

#define FAKE_VAL(type) ((type)0)

... type是否有任何值(包括结构,函数指针等)FAKE_VAL(type)会导致编译时错误?

我问,因为我有一个宏,它将一个函数指针作为一个参数,并且需要找到它的返回值的大小。我知道函数指针所采用的参数的类型和数量,所以我打算写一些类似的东西:

sizeof(fptr(FAKE_VAL(arg_type_1), FAKE_VAL(arg_type_2)))

arg_type_12几乎可以是任何东西。

4 个答案:

答案 0 :(得分:3)

当然有。

struct fred(即不是指针) - 如何将0(标量类型)转换为结构(非标量类型)? 任何字面值FAKE_VAL("hi")都会(("hi")0) - 这是什么意思?

答案 1 :(得分:2)

您无法将int转换为数组类型,因此

FAKE_VAL(int[5]);

会失败。 Try it!

答案 2 :(得分:0)

给它一个更系统的答案。在C中,只允许使用算术和指针类型。因此,任何structunion或数组类型都会导致编译时错误。

答案 3 :(得分:-1)

类型转换用于通知编译器程序员已经考虑了以与声明方式不同的方式使用变量的副作用。这会导致编译器关闭其检查。所以对于类型转换,你不会收到警告/错误。
是啊。它确实将任何类型的类型转换为类型转换。我的错。 但是,当程序实际运行时,这可能会导致分段错误/错误。