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 遗留错误:没有对 xy.

的引用
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