c中的嵌套函数?
Nested function in c?
目的是实现一个 c 函数,它接受两个未签名的 int n 和 m 并计算非负结果 m^n。它还说要忽略可能的溢出。
所以这是讲师给出的解决方案:
unsigned int power(unsigned int m, unsigned n) {
int power(int x, int y) {
int result = 1;
while(m > 0) {
result *= n;
--m;
}
return result;
}
虽然我理解算法本身,但我不明白他为什么选择使用嵌套函数。还有为什么缺少大括号。
我会简单地写这样的东西:
unsigned int power(unsigned int m, unsigned n) {
int result = 1;
while(m > 0) {
result *= n;
--m;
}
return result;
}
谁能解释一下,他为什么选择嵌套的,为什么这样更好?
标准 C 不支持嵌套函数,GNU C 中有一个扩展支持它但不是标准。
你写的代码很好,你讲师给你的代码有错误。
要了解嵌套函数,您可以查看此处:
https://gcc.gnu.org/onlinedocs/gcc/Nested-Functions.html
看起来 int
版本是一个 copy/paste 遗留错误:没有对 x
或 y
.
的引用
unsigned int power(unsigned int m, unsigned n) {
int power(int x, int y) { /* copy/paste left overs */
int result = 1;
while(m > 0) {
result *= n;
--m;
}
return result;
}
讲师给你的解决方案可能有错误。您的代码似乎是正确的。
C 语言不支持在函数内部定义函数。但是,您可以在函数内部声明一个函数。
gcc 有一个支持嵌套函数的扩展。参见 this。
目的是实现一个 c 函数,它接受两个未签名的 int n 和 m 并计算非负结果 m^n。它还说要忽略可能的溢出。
所以这是讲师给出的解决方案:
unsigned int power(unsigned int m, unsigned n) {
int power(int x, int y) {
int result = 1;
while(m > 0) {
result *= n;
--m;
}
return result;
}
虽然我理解算法本身,但我不明白他为什么选择使用嵌套函数。还有为什么缺少大括号。
我会简单地写这样的东西:
unsigned int power(unsigned int m, unsigned n) {
int result = 1;
while(m > 0) {
result *= n;
--m;
}
return result;
}
谁能解释一下,他为什么选择嵌套的,为什么这样更好?
标准 C 不支持嵌套函数,GNU C 中有一个扩展支持它但不是标准。
你写的代码很好,你讲师给你的代码有错误。
要了解嵌套函数,您可以查看此处: https://gcc.gnu.org/onlinedocs/gcc/Nested-Functions.html
看起来 int
版本是一个 copy/paste 遗留错误:没有对 x
或 y
.
unsigned int power(unsigned int m, unsigned n) {
int power(int x, int y) { /* copy/paste left overs */
int result = 1;
while(m > 0) {
result *= n;
--m;
}
return result;
}
讲师给你的解决方案可能有错误。您的代码似乎是正确的。
C 语言不支持在函数内部定义函数。但是,您可以在函数内部声明一个函数。
gcc 有一个支持嵌套函数的扩展。参见 this。