为何不包含头文件可以使用另一个文件中的函数但是变量不可以
为什么不包含头文件可以使用另一个文件中的函数但是变量不可以
文件a.h中
文件a.cpp中
文件b.cpp中
为什么没有include "a.h",在另外一个文件中可以用foo,却不能用mym
全局变量和函数是不同的吗
------解决方案--------------------
不#include "a.h", a.cpp又没有定义int mym;
------解决方案--------------------
int foo(int a);只是是声明
int mym ; 是声明,也是定义
------解决方案--------------------
不包含a.h,则mym只有声明,没有定义(mym是在.h中定义的,这很奇怪,如果.h多次包含,会出现重复定义)
但是对于函数,如果没有声明,老的实现是假定它是返回int的函数,现在的实现对此有一定的兼容性
对新的语法来说,函数不声明就使用,是语法错误。
------解决方案--------------------
你真正的错误是直接在a.h定义了变量,而不仅仅是声明。
当你有两个源文件都包含了a.h你就会遇到变量重定义错误。
函数声明(不包含函数体的)没有extern也是外部的,因为没有函数体,无论如何都不能成为一个定义。
变量必须加上extern才是外部的,也就是一个声明而非定义。
文件a.h中
int mym ;
int foo(int a);
文件a.cpp中
#include "stdafx.h"
int foo(int a)
{
return 0;
}
文件b.cpp中
#include "stdafx.h"
extern int mym;
extern int foo(int a);
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
mym = 5; //报错,加上include "a.h"可以链接通过
foo(5); //
return 0;
}
为什么没有include "a.h",在另外一个文件中可以用foo,却不能用mym
全局变量和函数是不同的吗
------解决方案--------------------
不#include "a.h", a.cpp又没有定义int mym;
------解决方案--------------------
int foo(int a);只是是声明
int mym ; 是声明,也是定义
------解决方案--------------------
不包含a.h,则mym只有声明,没有定义(mym是在.h中定义的,这很奇怪,如果.h多次包含,会出现重复定义)
但是对于函数,如果没有声明,老的实现是假定它是返回int的函数,现在的实现对此有一定的兼容性
对新的语法来说,函数不声明就使用,是语法错误。
------解决方案--------------------
你真正的错误是直接在a.h定义了变量,而不仅仅是声明。
当你有两个源文件都包含了a.h你就会遇到变量重定义错误。
函数声明(不包含函数体的)没有extern也是外部的,因为没有函数体,无论如何都不能成为一个定义。
变量必须加上extern才是外部的,也就是一个声明而非定义。