头文件中包含的函数未执行,但没有编译错误

Function included in header not executing, but no compile errors

本文关键字:错误 编译 执行 文件 包含 函数      更新时间:2023-10-16

我有一个简单的main函数,它调用另一个包含在header中的函数。

可以看到,main函数包括main.h和initvars.cpp。我希望我的函数,在执行时,调用initvars函数,它应该打印到命令窗口"Hello world",然后等待用户输入关闭窗口。

然而,我没有得到这个结果-当我在VS 2015中运行'debug'时,命令窗口打开然后立即关闭。

为什么这段代码不能引起期望的响应?

//Source.cpp
#include <iostream>
#include "main.h"
void main() {
    void initVars();
}

//main.h
void initvars() {
std::cout << "Hello world" << std::endl;
std::cin.get();
}

//initvars.cpp
#ifndef _MAIN_H
#define _MAIN_H
#include <string>
void initVars();
#endif

如果你想调用一个函数,你只需要调用它的名字,而不需要这里的void类型:

void main() {
  initVars();
}
至于为什么没有编译错误,这是因为编译器认为
void initVars();

在main内部作为函数的原型,是的,prototype不仅可以在全局作用域内的函数内部,这就是为什么没有错误。

对于命名,最好将包含main函数的文件命名为main.cpp,而将包含类的文件命名为classname.h和classname.cpp。还要注意,您需要将类的头文件包含到您的cpp文件中。

您的代码编译失败,但正在运行最后一个成功编译的版本。

改变
void main() {
    void initVars();
}

void main() {
    initVars();
}

我还建议遵循这个答案,这样你就会在代码编译失败时得到更明确的警告。