我正在编写一些代码(使用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 *,对吗?
谢谢。