即使在使用函数之前没有函数声明,C++ 程序也可以工作
c++ program is working even without function declaration before using the function
我刚刚开始学习C ++,我遇到了函数声明的概念。它说"必须在使用前声明一个函数",但我编写了一个程序,其中我注释了函数声明并使用了该函数。我的程序仍在工作。我想知道我在这里错过了什么。我正在日食上运行这个程序。这是一个简单的程序,我将 a 和 b 的引用传递给交换函数并交换 a 和 b 的值。
#include <iostream>
#include <stdio.h>
#pragma pack(1)
using namespace std;
//void swap(int &,int &);
int main()
{
int num1,num2;
cout<<endl<<"Enter two nosn";
cin>>num1>>num2;
cout<<"nBefore callt"<<num1<<"t"<<num2<<endl;
swap(num1,num2);
cout<<"nAfter callt"<<num1<<"t"<<num2<<endl;
}
void swap(int &a,int &b) //Saving memory here
{
int c=a;
a=b;
b=c;
}
解释是您包含的标头之一提供了名为 swap()
的内容。
一些供应商以在stdio.h
中提供swap()
宏而闻名。 这样做的问题是,当使用另一个编译器构建时,它会导致代码中断。
另一种可能的解释是,C++标准在命名空间std
中提供了一个模板化的swap()
函数,在标准标头algorithm
中指定。 对于某些实现,标准头文件相互包含(或提供彼此指定的函数(。 然而,同样,如果您使用不同的编译器构建代码,依赖于一个标准标头提供来自另一个标准标头的功能的代码通常会中断 - 因为标准不需要这些东西。
因此,请尝试删除swap()
的定义。 如果你的代码仍然编译/链接/运行,以上就是解释之一 - 至少使用你的编译器和标准库。 另一个指标是在swap()
中放置一个输出语句 - 如果你的代码仍然编译/链接/运行,但不产生输出 - 那么这是另一个指标。
如果您删除#include <stdio.h>
(您没有使用其中的任何标准(并且您的代码停止工作,这将指向哪个标头是原因。
- 因为在 C++ 中有一个预定义的函数称为
swap
. - 如果删除函数定义,则代码也将编译,因为编译器将其视为预定义函数。
相关文章:
- "error: no matching function for call to"构造函数错误
- 什么时候调用组成单元对象的析构函数
- 继承函数的重载解析
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- C++模板来检查友元函数的存在
- 递归函数计算序列中的平方和(并输出过程)
- 对RValue对象调用的LValue ref限定成员函数
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 为什么使用 "this" 指针调用派生成员函数?
- 将对象数组的引用传递给函数
- 函数调用中参数的顺序重要吗
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用不带参数的函数访问结构元素
- 代码在main()中运行,但在函数中出现错误
- 内置函数可查看CPP中的成员变量
- 如何获取std::result_of函数的返回类型
- 如何在c++中为模板函数实例创建快捷方式
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗