如何调用其原型在另一个函数中范围内的函数
How to call a function whose prototype is scoped inside another function?
要声明函数原型,我们在室外和顶部声明它,这意味着在函数定义之前。
1-我想知道为什么C 允许在其他功能定义的主体内声明prototypes scoped
?
2-如何调用一个函数,其原型在另一个功能的身体内?
这是一个示例:
#include "stdafx.h"
#include <iostream>
using namespace std;
void Bar()
{
cout << "Bar..." << endl;
void Baz();
}
int main()
{
void Foo();
Foo();
Bar();
Baz(); // how to call this function?
cin.get();
return 0;
}
void Foo()
{
cout << "Foo..." << endl;
}
void Baz()
{
cout << "Baz..." << endl;
}
一个函数在一个函数内部在另一个函数中不可见,因此您在此处编写的代码无法正常工作。但是,没有什么可以阻止您在main
内提供另一个功能原型:
int main()
{
void Foo();
Foo();
Bar();
void Baz();
Baz();
cin.get();
return 0;
}
说过这样的代码是非常不寻常的 - 如果您是要原型函数原型,那就在全球范围内进行。很少看到在单个功能内定义的功能原型,并且几乎总是一个错误或非常差的编码样式。
c 允许这样做有两个原因:
向后兼容。这是合法的C代码,从历史上看,C 试图在可能的情况下保持与C的兼容性。(有很多法律C代码不会在C 中编译,因此这不是一个艰难的规则,但这是一个很好的指导理念。)
"为什么不呢?"原则。功能原型实际上只是函数的声明。C 可让您在不同时间点声明各种对象。允许在功能内部的函数声明作为允许声明的特殊情况,因此明确地不这样可以在规格中需要额外的动词,并且可能在真正奇怪的情况下可能会伤害某人。
可以说,这是一个糟糕的决定,因为它导致了C 最烦人的解析。例如,以下代码行被解释为函数原型:
std::vector<int> x(); // Oops - it's a function prototype!
更糟的是这样的事情:
std::istream input;
std::vector<int> x(istream_iterator<int>(input), istream_iterator<int>()); // Oops - it's a function prototype!
通过添加新的支撑初始化语法来解决这:
std::vector<int> x{}; // Okay, a vector.
std::vector<int> x{istream_iterator<int>{input}, istream_iterator<int>{}}; // Sure, that's fine too.
相关文章:
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错
- 输入到文件并输出到另一个文件,并将流文件传递给函数
- 修改函数中的指针(将另一个指针作为参数传递)
- 如何将指针从一个void函数传递到另一个C++
- 如何从另一个文件继承私有成员变量和公共函数
- 使用.find函数在c++中查找字符和另一个字符之间的大小
- C++-我可以创建另一个类的成员并在构造函数中使用它吗
- 如何在C++中将函数发送到另一个进程
- 如何在qt中从另一个类调用函数
- 如何将一个类的函数作为另一个类的另一个函数的参数传递
- 在作为静态成员包含在另一个类中的类的构造函数中使用 cout
- 将 N-arg 函数包装到另一个函数中
- 为什么我的模板化函数需要从一个迭代器转换到另一个迭代器?
- C++重载函数,一个采用基类的参数,另一个采用派生类的参数
- C++从另一个函数退出函数
- 为什么我不能在主函数之外定义一个类的对象(它继承了另一个类)?
- 在一个类中使用另一个类中的函数,而不在 c++ 中使用继承
- C++ STD 函数运算符:有没有一种方法可以通过函数将一个向量映射到另一个向量上?