即使在使用函数之前没有函数声明,C++ 程序也可以工作

c++ program is working even without function declaration before using the function

本文关键字:函数 C++ 程序 也可以 工作 声明      更新时间:2023-10-16

我刚刚开始学习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 .
  • 如果删除函数定义,则代码也将编译,因为编译器将其视为预定义函数。