词条 | include |
释义 | Include 指命,在JSP中包含一个静态的文件,同时解析这个文件中的JSP语句。 C/C++中的include命令引言做c/c++编程的对#include指令都不会陌生,绝大多数也都知道如何使用,但我相信仍有人对此是一知半解, C: #include <stdio.h> C++: #include <iostream> 表示包含C/C++标准输入头文件。包含指令不仅仅限于.h头文件,可以包含任何编译器能识别的C/C++代码文件,包括.c,.hpp,.cpp,.hxx,.cxx等,甚至.txt,.abc等等都可以 名词解释preprocess 预处理:为方便编译器处理而设置的一种机制,包括一些常用预处理指令和语句,我们统称为预处理系统。 如#include #define #if...#else...#endif #pragma等 这些指令的实现是由编译器来决定的(implementation specified) 提到预处理指令,顺便说一下头文件防止重复包含的2种方法 a.保护宏(暂且称为Macro guard 宏卫兵?): #ifndef _ABCDE_H #define _ABCDE_H /* 代码部分 */ #endif 在被包含过一次之后,宏_ABCDE_H已经有了,下次再碰到就会略过从#define _ABCDE_H开始到#endif之间的代码 还有一种特定编译器支持的指令: b.#pragma once 能保证该文件(物理上的)只被编译一次,也能起到防止重复包含的作用 但这2种方式是有区别的: a.Macro guard可移植性好,绝大多数编译器都支持,而且万一不小心拷贝了几分相同的代码也不会出问题,但你得确保这个宏名不会与其他的宏冲突,否则等编译器报出一大堆错误的时候你可能会觉得莫名其妙; b.#pragma once指令简单,它能保证该文件(物理上的)只被编译一次,不用去费劲的想不同的宏名,但如果有几份该文件的拷贝,显然起不到作用。 declaration 声明:指将一个名称引入当前编译单元,或者重新声明一个前面已经声明过的名称,声明指定了如何解释一个名称和该名称具有的属性; 例如: int main(void) { int a; // 声明了变量a,类型为int int *pa; // 声明了变量pa,类型为指向int型的指针类型 } definition 定义:除了以下情况,声明就是定义 a.声明函数但不包括函数体; b.声明包含extern链接限定符,例如:extern int a; c.声明既没有初始化语法,也没有函数体; d.类声明中声明静态数据成员; e.类名字声明; f.typedef声明; g.using声明或者using指令; 以上情况适用于C具有的特征,C++则完全适用,一般来说定义要为其对象分配或预留存储空间,而声明则不用。 translation unit 编译单元:一个源文件,.c .cpp等和它所包含的文件一起,在经过预处理之后形成一个源码文件,标准称之为translation unit(编译单元)包括一系列的声明和定义;一个program(程序)由一个或多个编译单元组成。编译器将各个翻译单元编译为目标代码(.obj),通过连接器(linker)将这些编译后的编译单元(即目标代码)连接成完整的指令序列(可执行文件、静态库、动态库等)。 one definition rule 一次定义规则:是指定义在所有进入连接的编译单元中只能有一次。 观点、例子A:头文件只放声明 example_a.h void function(); example_a.cpp: #include "example_a.h" void function() {} B.被包含的文件可以使用任意扩展名: 只要是用符合标准的代码编写的文本文件,就可以使用#include来进行包含,包括.cpp .c等常见的源文件扩展名; example_b_1.b void function(); example_b_1.cpp: #include "example_b_1.b" void function() {} example_b_2.b void function1(); void function2(); example_b_21.cpp: void function1() {} example_b_22.cpp: #include "example_b_1.b" #include "example_b_21.cpp" void function2() {} 上面的例子中,example_b_21.cpp仅被包含在xample_b_22.cpp中,不再被其他的文件包含,而且不加入工程中; C.标准头文件的使用 最新的C++标准库中的一切内容都被放在名字空间std中(名字空间中的内容对外是不可见的),但是带来了一个新问题,无数现有的C++代码都依赖于使用了多年的伪标准库中的功能,如声明在<iostream.h>等头文件中的功能,使用std包装标准库导致现有代码的不可用,为了兼容这种情况,标准委员会为包装了std的那部分标准库创建了新的头文件,新的头文件的文件名与旧的一样,只是没有.h这个后缀,如<iostream.h>就变成了<iostream>。对于C头文件,采用同样的方法,但还在每个头文件名前加了字符c,如<string.h>就变成了<cstring>,<stdio.h>变成了<cstdio>。最好使用新的文件头,使用新的文件头的C++程序,需要使用using namespace std或者using namespace std::指定的类名,等方法来使需要的类对于我们的代码可视。 用法#include后面有两种方式,<>和""前者现在标准库中查找,查找不到在path中查找。后者为文件路径,若直接是文件名则在项目根目录下查找 总结既然是经常使用的东西,我们就应该明白它的原理,减少编程时的困惑,提高编程的效率。 JSP中的include命令指令Include 指令 在JSP中包含一个静态的文件,同时解析这个文件中的JSP语句. JSP 语法 <%@ include file="relativeURL" %> 例子 include.jsp: <html> <head><title>An Include Test</title></head> <body bgcolor="white"> <font color="blue"> The current date and time are <%@ include file="date.jsp" %> </font> </body> </html> date.jsp: <%@ page import="java.util.*" %> <%= (new java.util.Date() ).toLocaleString() %> Displays in the page: The current date and time are Aug 30, 1999 2:38:40 描述<%@include %>指命将会在JSP编译时插入一个包含文本或代码的文件,当你使用<%@ include %>指命时,这个包含的过程就当是静态的。静态的包含就是指这个被包含的文件将会被插入到JSP文件中去,这个包含的文件可以是JSP文件,HTML文件,文本文件。如果包含的是JSP文件,这个包含的JSP的文件中代码将会被执行。 如果你仅仅只是用include 来包含一个静态文件。那么这个包含的文件所执行的结果将会插入到JSP文件中放<% @ include %>的地方。一旦包含文件被执行,那么主JSP文件的过程将会被恢复,继续执行下一行. 这个被包含文件可以是html文件,jsp文件,文本文件,或者只是一段Java代码,但是你得注意在这个包含文件中不能使用<html>,</html>,<body>,</body>标记,因为这将会影响在原JSP文件中同样的标记 ,这样做有时会导致错误. 有一些<%@ include %>指命的行为是以特殊的JSP编译条件为基础,比如: 这个被包含的文件必须对所有客户都有开放且必须f有效,或者它有安全限制 如果这个包含文件被改变,包含此文件的JSP文件将被重新编译 属性: file="relativeURL" 这个包含文件的路径名一般来说是指相对路径,不需要什么端口,协议,和域名,如下: "error.jsp""/templates/onlinestore.html""/beans/calendar.jsp" 如果这个路径以"/"开头,那么这个路径主要是参照JSP应用的上下关系路径,如果路径是以文件名或目录名开头,那么这个路径就是正在使用的JSP文件的当前路径. |
随便看 |
百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。