在以下递归函数中,
int subtractByOne(int num) {
printf("%d\n", num);
if (num == 0)
return 0;
return subtractByOne(num - 1);
}
Run Code Online (Sandbox Code Playgroud)
为什么最终的回归是必要的?据我了解,基本情况将随时停止递归,当控制到达函数的结尾(递归调用后),该函数将控制权转移到任何人把它叫做没有回报.
我对堆栈帧和返回地址的了解很少,但堆栈应该接收一个独立于实际返回关键字的返回地址,不是吗?
Visual Studio 2015会发出有关控制路径的警告,我理解这一点.但是,在编程课程中,平地机的IDE不会编译类似的代码,教授评论代码是不正确的,而不是只是不好的做法.我当时修复了代码,但从未理解为什么它不正确.
我正在尝试使用 makefile 将三个文件编译并链接到一个可执行文件中,但似乎重新定义了 main 或以某种方式混淆了编译/链接过程。该项目是针对一个类,目标是实现一个线性反馈移位寄存器,但我们必须使用一个 makefile。
我在哪里重新定义了 main?如何更改我的 makefile 以创建我的可执行文件?我注意到 test.o 的错误指向重新定义了 main,但我不确定为什么或如何。
错误:
g++ -c main.cpp LFSR.cpp -Wall -Werror -ansi -pedantic
g++ -c test.cpp -Wall -Werror -ansi -pedantic
g++ main.o LFSR.o test.o -o ps2a -lboost_unit_test_framework
test.o: In function `main':
test.cpp:(.text+0xa3): multiple definition of `main'
main.o:main.cpp:(.text+0x0): first defined here
collect2: error: ld returned 1 exit status
Makefile:4: recipe for target 'ps2a' failed
make: *** [ps2a] Error 1
Run Code Online (Sandbox Code Playgroud)
我的生成文件:
all: ps2a
ps2a: main.o LFSR.o test.o
g++ main.o LFSR.o test.o -o ps2a …Run Code Online (Sandbox Code Playgroud)