在平时的学习中,写代码的时候可能会只写一个简单的demo,一般也就最多两三个文件。但是在实际的运用当中,代码文件可能会达到几十个甚至几百几千个。这个时候就需要通过文件夹来进行区分,也叫包。
下面来看下c/c++、java、go和python如何区分不同文件夹下的文件并进行导入。
c/c++的写法
文件夹结构
headfile.h
//头文件中一般用来声明常量和函数,c文件中具体定义这些申明,目的是防止重复定义
#define TMP 3
void printNum(int num);
main.c
//#include用来导入头文件,其中<>用来引用标准库中的头文件,双引号用来引用自己定义的头文件
#include <stdio.h>
#include "headfile.h"
void printNum(int num) {
printf("num is %dn", num);
}
int main() {
printf("TMP=%d", TMP);
printNum(1);
}
java的写法
First .java
package daobao1; //声明在那个包
public class First {
public String name;
public void getName() {
System.out.println("First name is "+this.name);
}
}
Second .java
package daobao1;
public class Second {
public String name;
public void getName() {
First first = new First(); //在同一个包中不需要导入该类
first.name = "first";
first.getName();
}
}
Third .java
package daobao2;
import daobao1.Second; //不在同一包中需要使用import进行导入
public class Third {
public static void main(String[] args) {
Second second = new Second();
second.name = "second";
second.getName();
}
}
go的写法
first.go
package daobao1 //声明在那个包下
import "fmt"
var tmp int = 3
func getTmp() {
fmt.Printf("tmp is %dn", tmp)
}
second.go
package daobao1
func GetFirstTmp() { //首字母大写,外面的包可以访问
getTmp()
}
main.go
package main
//import bao "daobao1" //导入包,可以在包名前重新进行命名
import "daobao1" //导入包
func main() {
daobao1.GetFirstTmp()
}
python的写法
first .py
num = 3
def get_num():
print("num is "+ str(num))
second .py
import daobao1.first as first
def get_first_num():
first.get_num()
main.py
import daobao1.second as second
if __name__ == "__main__":
second.get_first_num()
对比总结:
- 各种语言的引用函数或变量或类的过程大同小异,其中c/c++中的没有包的概念,但是其和导包的用法类似,都是为了解决在不同的文件夹下同名文件或函数的冲突问题。
- java, go和python的导包都是用到import,但是go和python导入后可以对其进行重命名。