小编Uri*_*law的帖子

为什么递归函数调用需要将值返回给调用函数?

在以下递归函数中,

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不会编译类似的代码,教授评论代码是不正确的,而不是只是不好的做法.我当时修复了代码,但从未理解为什么它不正确.

c recursion return visual-studio

0
推荐指数
1
解决办法
1380
查看次数

如何解决makefile中main重定义的问题

我正在尝试使用 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)

c++ makefile

0
推荐指数
1
解决办法
558
查看次数

标签 统计

c ×1

c++ ×1

makefile ×1

recursion ×1

return ×1

visual-studio ×1