[问题] function 中的 function

楼主: gowrite (gowrite)   2020-07-06 11:51:38
开发平台(Platform): (Ex: Win10, Linux, ...)
linux
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
GCC 10.1
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
n/a
问题(Question):
大家好,最近看到了一张大约 10 年前的考卷,
上面有一个题目,就是一个简单的 C 语言,
大概是这样
int func_1(int a){
int func_2(int num){
return num*num;
}
return func_2(a);
}
int main(){
printf("a = %d\n" , func_1(10) );
return 0;
}
我的问题是,那张考卷上的答案写说“这题的 C 程式无法编译”

可是我用 GCC 自己照着考卷写,却可以编译,且答案都正确
那请问这样问题是出在那?
有可能 10 年前的 GCC 无法编译这样的程式吗?
还是有可能是别的可能?
那个答案写错吗?
但是该国家考试的考卷,并没有更正该题错误
所以想问该怎么理解这个问题??
另外想请问一下
像这样子把 function 写在 function 里面,
在别的语言很常见到这样的写法,
例如:JavaScript
但是在 C 语言里面倒是第一次看到有人这样写,而且还是在考卷上
在之前阅读过的 C 语言的教学书中,没看过有人这样教,
请问 C 语言真的可以这样写吗?
有没有错误的可能?
喂入的资料(Input):
皆正确,没问题
预期的正确结果(Expected Output):
正确
错误结果(Wrong Output):
无,仅讨论观念问题
程式码(Code):(请善用置底文网页, 记得排版,禁止使用图档)
上述程式码
补充说明(Supplement):
n/a
作者: bibo9901 (function(){})()   2020-07-06 11:58:00
这是GCC特有的
作者: yoche2000 (Sushi Desu! 在下寿司)   2020-07-06 12:10:00
num 只有被 int 没有质 所以num*num才跑不出来吧
作者: descent (“雄辩是银,沉默是金”)   2020-07-06 13:13:00
-pedantic-errors 试试这个 option
作者: TitanEric (泰坦)   2020-07-06 18:45:00
好神 原来gcc这样给过查了一下 还真的 nested functions
作者: a1u1usul3 (Q-Max)   2020-07-06 19:01:00
这边好像有讨论过了 #1K-Pqe51改用clang编就编不过的东西就不是标准
作者: plsmaop (plsmaop)   2020-07-07 18:16:00
gcc 给过不代表是 c 语言特性,请参考 c spec
作者: dces4212 (flawless)   2020-07-08 02:04:00
GNU extension
作者: CoNsTaR ((const *))   2020-07-08 09:57:00
clang 记得也可以有 closure,不过也是 extension在 clang 叫做 blocks,-fblocks想要用 clang 编 gcc 的 source 应该可以用 -std=gnu11之类的?
作者: alan23273850   2020-07-12 09:41:00
我记得C不能写nested function欸

Links booklink

Contact Us: admin [ a t ] ucptt.com