最佳答案
Coderbyte 是一个在线编码挑战站点(我2分钟前才发现它)。
你遇到的第一个 C + + 挑战 有一个需要修改的 C + + 框架:
#include <iostream> #include <string> using namespace std; int FirstFactorial(int num) { // Code goes here return num; } int main() { // Keep this function call here cout << FirstFactorial(gets(stdin)); return 0; }
如果你对 C + + 不太熟悉,那么 *第一个出现在你眼前的就是:
int FirstFactorial(int num);
cout << FirstFactorial(gets(stdin));
好的,代码调用 gets
,这在 C + + 11之后就被废弃了,在 C + + 14之后被删除了,这本身就很糟糕。
但后来我意识到: gets
是 char*(char*)
型。因此,它不应该接受 FILE*
参数,结果也不应该用于取代 int
参数,但是... ... 它不仅编译时没有任何警告或错误,而且它运行时实际上将正确的输入值传递给 FirstFactorial
。
在这个特定的站点之外,代码不能编译(正如预期的那样) ,那么这里发生了什么?
* 其实第一个是 using namespace std
但这和我的问题无关。