我错误地在 MPI 中使用了以下函数 -
double f(x) {
return(4.0/(1 + x*x));
}
请注意,我没有在上面的代码中声明x
的数据类型。
然后编译它使用:
mpicc q.c -o q
程序仍然没有抛出错误并成功编译。
并且在使用包装器时,我得到了 f
的以下值 -
f(2) = 0.8
f(1) = 2
这是如何无误地工作的?
最佳答案
在旧式 C 中,任何使用名称声明但没有类型变量的类型都具有 int
类型。所以函数将采用整数参数,并且在表达式中它将被提升为 double 。
更新
在 C 的准标准版本和第一个标准版本 C89 中,没有类型声明的变量默认为 int
类型。这种行为在 C99 和后续标准中被删除。人们可以在 Kernigan&Ritchie 的书中读到它 C Programming Language, 2nd Edition
.
关于C函数在不指定参数数据类型的情况下工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47208101/