目录

第1章配置    1

第2章核心文件    6

2.1 核心文件    6

2.2 编译时使用核心文件    6

2.3 运行时使用核心文件    7

2.4 依赖关系    7

第3章 AUX    8

3.1 AUX的作用    8

3.2 相关文件    8

3.3 使用AUX    8

第4章 GLUT    10

4.1 GLUT的作用    10

4.2 相关文件    10

4.3 使用GLUT    10

4.4 编译GLUT    11

4.5 替代产品    11

第5章 GLEXT    12

5.1 GLEXT的作用    12

5.2 相关文件    12

5.3 使用GLEXT    12

5.3.1 使用wglGetProcAddress    13

5.3.2 使用glext.dll导出函数    13

第6章 GLEW    15

6.1 相关文件    15

6.2 使用GLEW    15

第1章配置

配置就是将OpenGL的头文件(*.h)、库文件(*.lib)、动态库文件(*.dll)复制到相应的目录内。

如下图所示,有三个文件夹和三个批处理文件。

图1.1

文件夹bin用来存放*.dll文件,如:glut32.dll。注意:32位的dll文件存放在x86子目录内;64位的dll文件存放在x64子目录内。

文件夹inc用来存放*.h文件,如:glew.h。

文件夹lib用来存放*.lib文件,如:glut32.lib。注意:32位的lib文件存放在x86子目录内;64位的lib文件存放在x64子目录内。

注意:本文不考虑安腾处理器(Itanium)。

运行setup.bat,将把bin、inc、lib内的文件复制到相应的目录内。其内容如下所示:

if defined ProgramFiles(x86) goto x64

call x86

goto :eof

:x64

call x64

setup.bat的工作为判断环境变量ProgramFiles(x86)是否已被定义。如果该环境变量已被定义,说明操作系统是64位的,将运行x64.bat;如果该环境变量未被定义,说明操作系统是32位的,将运行x86.bat。

x86.bat的内容如下

rem copy *.dll

xcopy .\bin\x86\*.dll %windir%\System32 /Y /R

:vc6

set vcPath="%ProgramFiles%\Microsoft Visual Studio\VC98"

if not exist %vcPath% goto vc2002

xcopy .\inc\*.h %vcPath%\Include\GL /Y /R

xcopy .\lib\x86\*.lib %vcPath%\Lib /Y /R

:vc2002

set vcPath="%ProgramFiles%\Microsoft Visual Studio .NET\Vc7\PlatformSDK"

if not exist %vcPath% goto vc2003

xcopy .\inc\*.h %vcPath%\Include\GL /Y /R

xcopy .\lib\x86\*.lib %vcPath%\Lib /Y /R

:vc2003

set vcPath="%ProgramFiles%\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK"

if not exist %vcPath% goto vc2005

xcopy .\inc\*.h %vcPath%\Include\GL /Y /R

xcopy .\lib\x86\*.lib %vcPath%\Lib /Y /R

:vc2005

set vcPath="%ProgramFiles%\Microsoft Visual Studio 8\VC\PlatformSDK"

if not exist %vcPath% goto vc2008

xcopy .\inc\*.h %vcPath%\Include\GL /Y /R

xcopy .\lib\x86\*.lib %vcPath%\Lib /Y /R

:vc2008

set vcPath="%ProgramFiles%\Microsoft SDKs\Windows\v6.0A"

if not exist %vcPath% goto vc2010

xcopy .\inc\*.h %vcPath%\Include\GL /Y /R

xcopy .\lib\x86\*.lib %vcPath%\Lib /Y /R

:vc2010

set vcPath="%ProgramFiles%\Microsoft SDKs\Windows\v7.0A"

if not exist %vcPath% goto vc2012

xcopy .\inc\*.h %vcPath%\Include\GL /Y /R

xcopy .\lib\x86\*.lib %vcPath%\Lib /Y /R

xcopy .\lib\x64\*.lib %vcPath%\Lib\x64 /Y /R

:vc2012

set vcPath="%ProgramFiles%\Microsoft SDKs\Windows\v7.1A"

if not exist %vcPath% goto vc2013

xcopy .\inc\*.h %vcPath%\Include\GL /Y /R

xcopy .\lib\x86\*.lib %vcPath%\Lib /Y /R

:vc2013

set vcPath="%ProgramFiles%\Windows Kits\8.0\Include\um\GL"

if not exist %vcPath% goto vc2015

xcopy .\inc\*.h %vcPath% /Y /R

xcopy .\lib\x86\*.lib "%ProgramFiles%\Windows Kits\8.0\Lib\win8\um\x86" /Y /R

xcopy .\lib\x64\*.lib "%ProgramFiles%\Windows Kits\8.0\Lib\win8\um\x64" /Y /R

:vc2015

set vcPath="%ProgramFiles%\Windows Kits\8.1\Include\um\GL"

if not exist %vcPath% goto vc20XX

xcopy .\inc\*.h %vcPath% /Y /R

xcopy .\lib\x86\*.lib "%ProgramFiles%\Windows Kits\8.1\Lib\winv6.3\um\x86" /Y /R

xcopy .\lib\x64\*.lib "%ProgramFiles%\Windows Kits\8.1\Lib\winv6.3\um\x64" /Y /R

:vc20XX

x64.bat的内容如下

rem copy *.dll

xcopy .\bin\x86\*.dll %windir%\SysWOW64 /Y /R

xcopy .\bin\x64\*.dll %windir%\System32 /Y /R

:vc6

set vcPath="%ProgramFiles(x86)%\Microsoft Visual Studio\VC98"

if not exist %vcPath% goto vc2002

xcopy .\inc\*.h %vcPath%\Include\GL /Y /R

xcopy .\lib\x86\*.lib %vcPath%\Lib /Y /R

:vc2002

set vcPath="%ProgramFiles(x86)%\Microsoft Visual Studio .NET\Vc7\PlatformSDK"

if not exist %vcPath% goto vc2003

xcopy .\inc\*.h %vcPath%\Include\GL /Y /R

xcopy .\lib\x86\*.lib %vcPath%\Lib /Y /R

:vc2003

set vcPath="%ProgramFiles(x86)%\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK"

if not exist %vcPath% goto vc2005

xcopy .\inc\*.h %vcPath%\Include\GL /Y /R

xcopy .\lib\x86\*.lib %vcPath%\Lib /Y /R

:vc2005

set vcPath="%ProgramFiles(x86)%\Microsoft Visual Studio 8\VC\PlatformSDK"

if not exist %vcPath% goto vc2008

xcopy .\inc\*.h %vcPath%\Include\GL /Y /R

xcopy .\lib\x86\*.lib %vcPath%\Lib /Y /R

:vc2008

set vcPath="%ProgramFiles%\Microsoft SDKs\Windows\v6.0A"

if not exist %vcPath% goto vc2010

xcopy .\inc\*.h %vcPath%\Include\GL /Y /R

xcopy .\lib\x86\*.lib %vcPath%\Lib /Y /R

xcopy .\lib\x64\*.lib %vcPath%\Lib\x64 /Y /R

:vc2010

set vcPath="%ProgramFiles(x86)%\Microsoft SDKs\Windows\v7.0A"

if not exist %vcPath% goto vc2012

xcopy .\inc\*.h %vcPath%\Include\GL /Y /R

xcopy .\lib\x86\*.lib %vcPath%\Lib /Y /R

xcopy .\lib\x64\*.lib %vcPath%\Lib\x64 /Y /R

:vc2012

set vcPath="%ProgramFiles(x86)%\Microsoft SDKs\Windows\v7.1A"

if not exist %vcPath% goto vc2013

xcopy .\inc\*.h %vcPath%\Include\GL /Y /R

xcopy .\lib\x86\*.lib %vcPath%\Lib /Y /R

:vc2013

set vcPath="%ProgramFiles(x86)%\Windows Kits\8.0\Include\um\GL"

if not exist %vcPath% goto vc2015

xcopy .\inc\*.h %vcPath% /Y /R

xcopy .\lib\x86\*.lib "%ProgramFiles(x86)%\Windows Kits\8.0\Lib\win8\um\x86" /Y /R

xcopy .\lib\x64\*.lib "%ProgramFiles(x86)%\Windows Kits\8.0\Lib\win8\um\x64" /Y /R

:vc2015

set vcPath="%ProgramFiles(x86)%\Windows Kits\8.1\Include\um\GL"

if not exist %vcPath% goto vc20XX

xcopy .\inc\*.h %vcPath% /Y /R

xcopy .\lib\x86\*.lib "%ProgramFiles(x86)%\Windows Kits\8.1\Lib\winv6.3\um\x86" /Y /R

xcopy .\lib\x64\*.lib "%ProgramFiles(x86)%\Windows Kits\8.1\Lib\winv6.3\um\x64" /Y /R

:vc20XX

注意:x64.bat 中vc2008是比较特殊的:它的目标目录是%ProgramFiles%,而不是%ProgramFiles(x86)%;

第2章核心文件

2.1 核心文件

核心文件有6个,如下表所示:

头文件

库文件

动态库文件

gl.h

opengl32.lib

opengl32.dll

glu.h

glu32.lib

glu32.dll

以gl开头的OpenGL函数,一般都被封装在opengl32.dll内。编程时,需要包含gl.h,编译时需要链接opengl32.lib。

以glu开头的OpenGL函数,一般都被封装在glu32.dll内。编程时,需要包含glu.h,编译时需要链接glu32.lib。

vc6至vc2015自带gl.h、glu.h、opengl32.lib、glu32.lib这四个文件。其中的lib文件还分为x86、x64、IA64Itanium)三个版本。

Windows系统自带opengl32.dll和glu32.dll。这两个文件的使用,下文会进行说明。

注意:VC++自带的*.h、*.lib,其版本为1.1;Windows自带的*.dll,其版本从1.1到4.X(应该与显卡驱动有关)。要使用OpenGL 1.2 至 4.X 新增的函数,需要另行处理,详见下文。

2.2 编译时使用核心文件

编译时核心文件的使用请参考如下面代码:

#include <windows.h>

#include <gl\gl.h>

#include <gl\glu.h>

#pragma comment (lib, "opengl32.lib")

#pragma comment (lib, "glu32.lib")

即包含头文件gl.h和glu.h,链接时使用opengl32.lib和glu32.lib。

注意:网上下载的压缩包内有时能够发现这些文件:opengl.lib、opengl.dll、glu.lib、glu.dll,它们与opengl32.lib、opengl32.dll、glu32.lib、glu32.dll的区别为:前者是SGI实现的OpenGL,后者是微软实现的OpenGL。

2.3 运行时使用核心文件

编译生成的.exe文件,在运行时需要opengl32.dll和glu32.dll这两个文件。

这两个文件Windows系统自带。32位操作系统下,它们位于%windir%\System32目录下,即一般位于C:\Windows\System32。64位操作系统下,32位程序与64位程序所需要的opengl32.dll、glu32.dll分为两套:64位的dll文件位于%windir%\System32;32位的dll文件位于%windir%\SysWOW64。

2.4 依赖关系

opengl32.dll和glu32.dll在运行时是相互依赖的,即opengl32.dll导入了glu32.dll内部的一些函数,glu32.dll也导入了opengl32.dll内部的一些函数。如下图所示:

图2.1

第3章 AUX

首先需要说明的是:AUX是OpenGL 1.0使用的辅助库,它已经过时。新编写的OpenGL程序里最好不要再使用它。

3.1 AUX的作用

直接使用gl和glu编写OpenGL程序,是一件比较繁琐的工作。以NeHe OpenGL教程第一课的代码为例,什么都没有绘制的代码量就将近四百行了。

AUX辅助库的作用就是为了简化OpenGL的编码。

3.2 相关文件

AUX相关文件有两个:glaux.h、glaux.lib。其中glaux.lib是静态库,所以运行时不再需要glaux.dll。

vc6至vc2005自带这两个文件,vc2008后不再自带。vc2008~vc2015要使用AUX,可将glaux.h、glaux.lib从vc6的安装目录复制到vc2008~vc2015的安装目录下。

3.3 使用AUX

下面是使用AUX的示例代码。它只有二十行左右,大大简化了编码。

#include <windows.h>

#include <GL/gl.h>

#pragma comment(lib,"OpenGL32.lib")

#include <GL/glaux.h>

#pragma comment(lib,"glaux.lib")

int main(int argc, char** argv)

{

auxInitDisplayMode (AUX_SINGLE | AUX_RGB);

auxInitPosition (0, 0, 500, 500);

auxInitWindow (argv[0]);

glBegin(GL_LINE_STRIP);

glVertex2f(-0.5, -0.5);

glVertex2f(-0.5, 0.5);

glEnd();

glFlush();

Sleep(10000);

return 0;

}

第4章 GLUT

4.1 GLUT的作用

从OpenGL 1.1开始,出现了GLUT(OpenGL Utility Tookit)。它与AUX的作用类似,也是为了简化OpenGL编码。此外,由它编写的代码还能够实现跨平台。

可以将GLUT看做是AUX的升级版。

4.2 相关文件

GLUT相关文件有三个:glut.h、glut32.lib、glut32.dll。

VC++和Windows系统不自带这些文件,需要下载。网址为:

http://www.opengl.org/resources/libraries/glut/glutdlls37beta.zip

解压后,将glut.h复制到图1.1中的inc目录;将glut32.lib复制到图1.1中的lib\x86目录;将glut32.dll复制到图1.1中的bin\x86目录。然后运行setup.bat,复制文件到相应的目录内。

4.3 使用GLUT

使用GLUT非常简单,只要包含glut.h头文件即可,即:

#include <GL/glut.h>

如下内容节选自glut.h

#include <windows.h>

#include <GL/gl.h>

#include <GL/glu.h>

#ifdef GLUT_USE_SGI_OPENGL

#pragma comment (lib, "opengl.lib")

#pragma comment (lib, "glu.lib")

#pragma comment (lib, "glut.lib")

#else

#pragma comment (lib, "opengl32.lib")

#pragma comment (lib, "glu32.lib")

#pragma comment (lib, "glut32.lib")

#endif

可见:

1、自动包含gl.h和glu.h;

2、自动链接opengl32.lib、glu32.lib、glut32.lib。

4.4 编译GLUT

glutdlls37beta.zip里没有64位的glut32.lib、glut32.dll。此时有两种解决方案:一是下载64位的glut32.lib、glut32.dll;二是下载GLUT的源代码(如:glut-3.7.6-src.zip),然后重新编译一遍。

有了源代码,还可以编译生成静态库,这样在运行程序时就不再需要glut32.dll了。

4.5 替代产品

GLUT也是一款较老的产品,它的源代码早已不再更新。如果想编译GLUT,又找不到源代码,就可以使用一些替代产品,如:Freeglut。

Freeglut的下载地址如下:

http://sourceforge.net/projects/freeglut/files/

第5章 GLEXT

首先需要说明的是:GLEXT已经过时,可用GLEW代替它。

5.1 GLEXT的作用

上文提到:VC++自带的*.h、*.lib,其版本为1.1;Windows自带的*.dll,其版本从1.1到4.X。这就产生一个问题:OpenGL32.dll里可能有某些函数(如:glTexImage3D),在gl.h和OpenGL32.lib里没有相应的声明,导致程序无法使用这些函数。

GLEXT就是用来扩展gl.h和OpenGL32.lib的,经过扩展后就可以使用OpenGL32.dll里的高版本函数了。

5.2 相关文件

GLEXT的相关文件:glcorearb.h、glext.h、wglext.h、glext.lib、glext.dll。

glcorearb.h似乎没有什么用处。glext.h里包含了以gl开头的函数声明,这些函数都是gl.h里所没有声明的函数,也就是从 OpenGL 1.2 开始逐步增加的函数。wglext.h里包含了以wgl开头的函数声明,这些函数只能在Windows平台上使用。

VC++和Windows系统不自带这些文件,需要下载。网址为:

http://sourceforge.net/projects/glextwin32/files/

下载glext.zip,解压后将glext.h、wglext.h复制到图1.1中的inc目录;将glext.lib复制到图1.1中的lib\x86目录;将glext.dll复制到图1.1中的bin\x86目录。然后运行setup.bat,复制文件到相应的目录内。

如果想自己编译生成glext.lib、glext.dll,可在上述网址下载glext_src.zip。

5.3 使用GLEXT

下面以使用OpenGL 1.2里的函数glTexImage3D为例,说明如何使用GLEXT。一共有两种方法。

5.3.1 使用wglGetProcAddress

参考如下代码:

#include <windows.h>

#include <gl\gl.h>

#include <gl\glu.h>

#pragma comment (lib, "opengl32.lib")

#pragma comment (lib, "glu32.lib")

#include <GL/glext.h>

#pragma comment(lib,"glext.lib")

void init(void)

{

PFNGLTEXIMAGE3DPROC pfn =

(PFNGLTEXIMAGE3DPROC)wglGetProcAddress("glTexImage3D");

if(pfn)

{

(*pfn)(GL_TEXTURE_3D, 0, GL_RGB, iWidth, iHeight

,iDepth, 0, GL_RGB, GL_UNSIGNED_BYTE, image);

}

}

语句(PFNGLTEXIMAGE3DPROC)wglGetProcAddress("glTexImage3D")从OpenGL32.dll里找到函数glTexImage3D的地址,将其强制转换为PFNGLTEXIMAGE3DPROC型的函数指针。接下来的(*pfn)(...);相当于调用glTexImage3D。

5.3.2 使用glext.dll导出函数

参考如下代码:

#include <windows.h>

#include <gl\gl.h>

#include <gl\glu.h>

#pragma comment (lib, "opengl32.lib")

#pragma comment (lib, "glu32.lib")

#define GL_GLEXT_PROTOTYPES

#include <GL/glext.h>

#pragma comment(lib,"glext.lib")

void init(void)

{

glTexImage3D(GL_TEXTURE_3D, 0, GL_RGB, iWidth, iHeight,

iDepth, 0, GL_RGB, GL_UNSIGNED_BYTE, image);

}

首先,它多了一条语句#define GL_GLEXT_PROTOTYPES。这样的话,glext.h里就有了函数glTexImage3D的声明。

代码glTexImage3D(...);会调用glext.dll的导出函数glTexImage3D。后者会在OpenGL32.dll里找到函数glTexImage3D,并执行该函数。

这种方法比使用wglGetProcAddress方便些,但是其效率估计会低一些。而且,编译生成glext.dll时,使用的是C++编译器,导致只有C++程序才能链接glext.lib。解决办法就是下载glext_src.zip,将.cpp文件的扩展名更改为.c,然后重新编译一遍。

第6章 GLEW

GLEW(The OpenGL Extension Wrangler Library)与GLEXT的功能相似。

6.1 相关文件

GLEW的相关文件如下:

glew.h            GLEW头文件。函数名以glew开头

wglew.h            GLEW针对Windows平台的头文件。函数名以wglew开头

glxew.h            GLEW针对Linex平台的头文件

glew32s.lib        静态库

glew32.lib        链接glew32.dll的库文件

glew32.dll        动态库文件

VC++和Windows系统不自带这些文件,需要下载。网址为:

http://sourceforge.net/projects/glew/files

以目前的最新版1.13.0为例,有三个文件

glew-1.13.0-win32.zip        Windows平台下编译的结果文件(不含源代码)

glew-1.13.0.zip            源代码(Windows)

glew-1.13.0.tgz            源代码

glew-1.13.0.zip与glew-1.13.0.tgz的区别仅仅在于:前者文本文件的行结束符为\r\n;后者文本文件的行结束符为\n(为苹果电脑准备的?)。

解压glew-1.13.0-win32.zip后,将相关文件复制到图1.1中的三个目录内。然后运行setup.bat。注意区分32位和64位的.lib和.dll文件。还要注意mx(multi context)版本的文件(*mx.lib和*mx.dll)它们用于多窗口多线程显示。

6.2 使用GLEW

下面以使用OpenGL 1.2里的函数glTexImage3D为例,说明如何使用GLEW。参考如下代码:

#include <GL/glew.h>

#pragma comment(lib,"glew32.lib")

#include <GL/glut.h>

void init(void)

{

... ... ...

glTexImage3D(GL_TEXTURE_3D, 0, GL_RGB, iWidth, iHeight,

iDepth, 0, GL_RGB, GL_UNSIGNED_BYTE, image);

... ... ...

}

int main(int argc, char** argv)

{

... ... ...

glutCreateWindow(argv[0]);

glewInit();

... ... ...

return 0;

}

说明:

1、#include <GL/glew.h> 必须在 #include <GL/gl.h> 的前面;

2、#pragma comment(lib,"glew32.lib")将自动链接glew32.lib;

3、需要在创建窗口(glutCreateWindow)后调用函数glewInit。

VC++配置OpenGL开发环境的更多相关文章

  1. VC 6中配置OpenGL开发环境

    2010,2012中配置类似 http://hi.baidu.com/yanzi52351/item/f9a600dffa4caa4ddcf9be1d VC 6中配置OpenGL开发环境 这里,我习惯 ...

  2. Windows 7 Visual Studio 2008配置OpenGL开发环境

    Windows 7 Visual Studio 2008配置OpenGL开发环境 glut下载地址: http://www.opengl.org/resources/libraries/glut/gl ...

  3. VS2010配置OpenGL开发环境

    OpenGL(Open Graphics Library)是一个跨编程语言.跨平台的专业图形程序接口.OpenGL是SGI公司开发的一套计算机图形处理系统,是图形硬件的软件接口,任何一个OpenGL应 ...

  4. VS2010配置OpenGL开发环境(转)

    OpenGL(Open Graphics Library)是一个跨编程语言.跨平台的专业图形程序接口.OpenGL是SGI公司开发的一套计算机图形处理系统,是图形硬件的软件接口,任何一个OpenGL应 ...

  5. vs2015配置OpenGL开发环境

    先吐槽下,不知道微软怎么整的,从win7开始,OpenGL的头文件更改到windows SDK中,不安装就不能用. 更搞笑的是,在win10下,vs2015安装还报win sdk安装失败,这典型的自己 ...

  6. [OpenGL]VS2010配置OpenGL开发环境

    opengl概述 OpenGL(Open Graphics Library)是一个跨编程语言.跨平台的专业图形程序接口. OpenGL是SGI公司开发的一套计算机图形处理系统,是图形硬件的软件接口,任 ...

  7. 在VS2017配置OpenGL开发环境

    这个方法适合初学者使用,较为简单方便.第一,你的VS2017一定要安装了C/C++开发组件可以打开Visual Studio Installer来查看另外,确定你有安装NuGet包管理器,在单个组件中 ...

  8. macOS Mojave配置OpenGL开发环境

    ---恢复内容开始--- 前言: 本文写作目的: 是由于本人参考 csdn原文 的方法配置环境时踩了很多坑,所以在此写一篇文防止以后用到. 工具: Xcode CMake 步骤: 准备工作: Xcod ...

  9. win7 64位系统,vs2010下配置OpenGL开发环境

    glut下载地址: http://www.opengl.org/resources/libraries/glut/glutdlls37beta.zip 或者:http://user.xmission. ...

随机推荐

  1. 系统进程的Watchdog

    编写者:李文栋 /rayleeya http://rayleeya.iteye.com/blog/1963408 3.1 Watchdog简介 对于像笔者这样没玩过硬件的纯软程序员来说,第一次看到这个 ...

  2. nginx配置 location root alias

    语法规则: location [=|~|~*|^~] /uri/ { … } = 开头表示精确匹配 ^~ 开头表示uri以某个常规字符串开头,理解为匹配 url路径即可.nginx不对url做编码,因 ...

  3. ThreadGroup

    http://blog.csdn.net/a352193394/article/details/39323427

  4. BZOJ1017魔兽地图DotR 樹形DP

    @(BZOJ)[樹形DP, 三維DP] Description DotR (Defense of the Robots) Allstars是一个风靡全球的魔兽地图,他的规则简单与同样流行的地图DotA ...

  5. 转:c++ 11 新特性

    声 明:本文源自 Danny Kalev 在 2011 年 6 月 21 日发表的<The Biggest Changes in C++11(and Why You Should Care)&g ...

  6. Maven实现多个项目关联自动化构建(maven-invoker-plugin插件的使用)

    以下内容引用自https://ayayui.gitbooks.io/tutorialspoint-maven/content/book/maven_build_automation.html: 注意: ...

  7. .net core mvc启动顺序以及主要部件2

    原文:.net core mvc启动顺序以及主要部件2 前一篇提到WebHost.CreateDefaultBuilder(args)方法创建了WebHostBuilder实例,WebHostBuil ...

  8. jmeter.properties控制聚合报告的用户响应时间设置和smmary results

    jmeter.properties的配置Summariser控制输出Summary Results,可以显式rt和tps等信息 Aggregate Report配置可以控制聚合报告的内容,控制90%用 ...

  9. 【转】Spring框架深入理解

    参考这篇文章: http://www.ibm.com/developerworks/cn/java/j-lo-spring-principle/ Spring内部分为Beans, Context 和 ...

  10. Swift标识符和keyword

    不论什么一种计算机语言都离不开标识符和keyword,下面我们将具体介绍Swift标识符和keyword. 标示符 标识符就是给变量.常量.方法.函数.枚举.结构体.类.协议等指定的名字.构成标识符的 ...