【发布时间】:2017-08-27 19:37:46
【问题描述】:
我有这段代码可以在 C 中运行,但不能在 C++ 中运行,有什么方法可以让它同时在 C 和 C++ 上运行吗?
void foo(void* b)
{
int *c = b;
printf("%d\n",*c);
}
int main ()
{
int a = 1000;
foo(&a);
return 0;
}
输出:
C++:
1 In function 'void foo(void*)':
2 Line 3: error: invalid conversion from 'void*' to 'int*'
3 compilation terminated due to -Wfatal-errors.
C:
1000
请帮忙
【问题讨论】:
-
int *c = static_cast<int*>(b); -
您可以将其从 void* 显式转换为 int* ,但这在 C 中是不必要的。
-
C 和 C++ 是不同的 编程语言。为什么您希望能够编写相同的代码在两者上运行?
-
请注意(即使使用强制转换),如果您传递一个最初不是
int *的指针(或多或少),这将导致静默的未定义行为 -
您的 C 代码中还有一个(静默)错误(不了解 C++)。在范围内没有原型的情况下调用接受可变数量参数 (
printf) 的函数会调用 未定义的行为。提高编译器的警告级别并注意警告!
标签: c++ c void-pointers