【发布时间】:2024-01-05 18:28:01
【问题描述】:
这是一个示例代码,类似于我遇到的问题
#include <stdio.h>
int cube_then_square(int x){
x = cube(x);
return x*x;
}
int cube(int y){
return y*y*y;
}
int main(int argc, char *argv[]){
printf("5 cubed then squared is: %d\n", cube_then_square(5));
return 0;
}
所以编译器给了我一个未声明多维数据集的问题。所以有人可以解释一下这些函数在内存中的顺序,等等......它与将原型放在顶部和 main 之后的实现有什么不同。谢谢。
【问题讨论】:
-
这与函数在内存中的放置顺序无关(这主要取决于链接器)。它是关于单遍编译器在调用该函数之前查看该函数的声明。 C++ 在某种程度上打破了“单程”假设,但只是在某种程度上。
-
@chris 不,他们不需要,它在被调用时被前向声明(如果这是 C)
-
@SteveCox,是的,我是在 C++ 的上下文中讨论的。看看标签是如何被删除的,我的评论也是如此。
-
这个程序是合法的 C 并且在 gcc 中编译得很好。
-
这通常会在新版本的 GCC 或 clang 中编译得很好,可以进行 2 次编译或前瞻,但不需要原型...
标签: c function prototype declaration