Closed. This question is off-topic. It is not currently accepting answers. Learn more。
想改进这个问题吗?Update the question所以堆栈溢出的值小于aa>。
6年前关闭。
我在为一个嵌入式系统写代码编译器是GCC派生的。
以下代码是否正确?
现在x的值应该是18。
编译器没有显示错误-但这是正确的吗?
或者覆盖堆栈上的一些内存。
谢谢。
想改进这个问题吗?Update the question所以堆栈溢出的值小于aa>。
6年前关闭。
我在为一个嵌入式系统写代码编译器是GCC派生的。
以下代码是否正确?
void *voidPointer = 0;
int (*functionPointer)(int a);
int testFunction(int a)
{
return(a+1);
}
void registerFunction(void *pvFunctionAddress)
{
voidPointer = pvFunctionAddress;
}
main()
{
...
registerFunction(testFunction);
functionPointer = voidPointer;
x = functionPointer(17);
...
}
现在x的值应该是18。
编译器没有显示错误-但这是正确的吗?
或者覆盖堆栈上的一些内存。
谢谢。
最佳答案
不,它永远不会是“正确的”,因为严格地说C禁止void *
和函数指针之间的转换。
如果它可以工作,那是因为特定的编译器允许它用于特定的目标(操作系统+硬件组合)。
08-19 18:41