c赋值,类型和源转换

时间:2015-09-19 02:02:30

标签: c casting

我正在编写一些代码(使用pycparser在python中),它对c(C99)语言源代码进行了一些编辑。它应该在代码中找到所有赋值语句,并用一个打印rvalue的函数替换rvalue并立即返回它。

例如,给定代码:

int x;
x = 5;  

结果将是:

int x;
x = myprint(5);

将myprint定义为

 int myprint(int k) {
     printf("%d",k);
     return k;
 }

因此,新代码中x的值将相同,但运行它也将打印指定的值。

这是一个问题:通常,rvalue的类型不像整数那么简单。 myprint的参数和返回类型应该是什么?

在C中,在赋值期间存在类型转换,使得rvalue被转换为左值的类型。在从参数类型到参数类型的函数调用期间,还有另一种类型转换。在我看来,如果myprint的参数类型和返回类型都是rvalue的类型或左值的类型都没关系,只要在左边的变量中以值结尾的值保持不变。我是对的吗?

一个小问题:

在这样的代码中:

int ** p
(*p) = <something>

rvalue会被转换为int *,对吗?

谢谢。

0 个答案:

没有答案