c语言静态函数调用问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言静态函数调用问题相关的知识,希望对你有一定的参考价值。
//a.cpp
static void a() //静待函数
cout<<"aaaaaa"<<endl;
//b.cpp
void b()
a();
//main.cpp
#include<iostream>
using namespace std;
#include"a.cpp"
#include"b.cpp"
void main()
b();
a()函数为静态函数,b()函数与a()函数不在同一文件,b()函数为什么可以正常调用a()函数呢???
static修饰的函数和变量在别的文件是绝对不可见的,这是楼上错误的地方,即使使用extern声明函数导出,也不可以,编译时根本就不能通过,会报static类型错误,不能导出。。。
在你原来文件结构上加入头文件:
//a.h
#include <iostream>
using namespace std;
void a();
//b.h
void b();
然后把main.cpp里面的2个include分别改成a.h和b.h,编译:g++ main.cpp a.cpp b.cpp会发现报错误:
a.cpp: In function ‘void a()’:
a.cpp:3: error: ‘void a()’ was declared ‘extern’ and later ‘static’
a.h:3: error: previous declaration of ‘void a()’
这里就是因为a函数是static类型,不能导出,把static去掉这里就可以编译通过了。。。。
这也是static其中一个用法追问
你好,你的意思是,在main.cpp、a.cpp、b.cpp三个文件基础上增加两个文件(a.h和b.h)吗
//main.cpp
#include
using namespace std;
#include"a.h"
#include"b.h"
void main()
b();
//a.cpp
static void a() //静态函数
cout
using namespace std;
void a();
//b.h
void b();
是这样吗?但还是不行啊
编译的时候用:g++ main.cpp a.cpp b.cpp
就是3个文件一起编译,这时候就会报static的错误,然后把static去掉,就可以编译通过,就知道static在这里的用处了。。
哦,在:
//b.cpp内加入一句:
#include"a.h"
意思就是在b.cpp中引入a.h使用,然后a.h声明了a函数,所以b.cpp中可以调用a函数,这里的main.cpp其实没用到a函数,可以不用这句#include"a.h"
编译的时候用:g++ main.cpp a.cpp b.cpp 就是3个文件一起编译 是什么意思啊
我用的vc6.0 怎么三个文件一起编译呢,g++是什么意思呢?
哦,vc啊,那就直接创建这些文件编译就行了,不需要我说的那个,我说的是linux下编译的方法,按照我说的再加一句就可以了
参考技术A 楼主您好,是这样的,因为你的main.cpp中包含#include"a.cpp"和#include"b.cpp",他们的意思是主程序文件包含其他a和b两个文件中的内容,因此可以调用里面的函数;如果去掉他们,若是主程序文件仍想调用他们,则必须在主程序文件中用extern声明,说明他们是在别的程序文件中,然后才可以调用。
希望对楼主理解有帮助。 参考技术B 楼主去掉两个关于cpp文件的包含语句,就会发现,无法调用a函数
以上是关于c语言静态函数调用问题的主要内容,如果未能解决你的问题,请参考以下文章