include
1. 概述
本文档介绍GS语言中的include机制,这是一种在编译阶段直接将文件内容插入到当前文件的预处理指令。include与C/C++中的#include指令功能相似,适用于代码片段的重用和头文件包含。
本文面向GS初学者或需要回顾GS#include机制的同学。
通过阅读本章节,您将掌握include的基本用法和路径规则,理解include与import的本质区别,学会在适合的场景下选择正确的代码包含方 式。
2. include 基础
2.1 include声明
#include是一种在编译阶段将文件内容直接插入到相应文件中的预处理指令,其基本语法如下:
#incldue "include_path"
需要注意的是#include机制仅支持字符串字面量作为include_path路径,而不支持以.分割的路径名形式。同时#include 机制直接在预编译阶段将#include语句替换为相应路径文件内容。其导入的函数或 变量符号等如同在本文件定义的函数或变量一样,可以直接进行调用。
实际上#include的作用和c++中的#include完全相同,示例如下:
// bar.gs
public string bar()
{
return "World";
}
string bar1()
{
return "World";
}
private string bar2()
{
return "World";
}
protected string bar3()
{
return "World";
}
// foo.gs
#include "bar.gs"
public string foo()
{
return "Hello ";
}
write(foo(), bar(), "\n"); // collect
write(foo(), bar1(), "\n"); // collect
write(foo(), bar2(), "\n"); // collect
write(foo(), bar3(), "\n"); // collect
示例2-1:include 使用示例
示例的输出结果如下:
Hello World
Hello World
Hello World
Hello World
从示例可以看出,#include语句将bar.gs脚本中的函数函数public string bar() 、string bar1()、private string bar2()、protected string bar3()均导入到了foo.gs脚本中,无论函数被定义为private还是protected在调用函数时均可以如同定义在同一文件中的函数一样直接调用。
实际上此时的foo.gs脚本等效于:
// foo.gs
public string bar()
{
return "World";
}
string bar1()
{
return "World";
}
private string bar2()
{
return "World";
}
protected string bar3()
{
return "World";
}
public string foo()
{
return "Hello ";
}
write(foo(), bar(), "\n"); // collect
write(foo(), bar1(), "\n"); // collect
write(foo(), bar2(), "\n"); // collect
write(foo(), bar3(), "\n"); // collect
示例2-2:include 使用等效示例
提示
一般情况下需要被#include包含的文件后缀会被更改为.gsh以与脚本文件进行区分。