Commit 00c187f5 authored by 魔法少女赵志辉's avatar 魔法少女赵志辉 🍊
Browse files

Add hyperlinks.

parent a968bddf
......@@ -4,9 +4,10 @@
\def\CC{ {C\nolinebreak[4]\hspace{-.05em}\raisebox{.4ex}{\small\bf ++}} }
\title{
% \vspace{-30pt}
\vspace{-50pt}
\textbf{\Huge Project0}\\
\textbf{\huge 《高级程序设计》课程项目说明}
\textbf{\huge 《高级程序设计》课程项目说明}\\
\small Version 1.1.0
}
\author{刘添翼\thanks{\href{mailto:tyi.liu@outlook.com}{tyi.liu@outlook.com}}}
......@@ -71,7 +72,7 @@
\item 实现一个\textbf{高级}的学生信息管理系统。
\end{itemize}
通常来说,每个学期会同时发布三个以上的项目,位同学可以任意选择一个并坚持完成。如果想要选择其他自定义的项目,可以联系助教。
通常来说,每个学期会同时发布三个以上的项目,位同学可以任意选择一个并坚持完成。如果想要选择其他自定义的项目,可以联系助教。
\section{关于GUI}
\subsection{一些传统}
......@@ -80,15 +81,25 @@
传统上,课程设计的前两个阶段被限定成项目中不能带有GUI,而第三个阶段的任务通常是为前面完成的项目加上GUI。我(们)觉得没有必要严格保持这个传统。
\subsection{图形库推荐}
如果对\CC{}的图形库并不熟悉,这里我们从简单到复杂给出三个库供参考:
\begin{itemize}
\item FLTK
\item wxWidgets
\item Qt
\end{itemize}
\begin{description}
\item[\href{https://www.fltk.org}{FLTK}] 是一个相当轻量级的\CC{}图形库。
\item[\href{https://www.wxwidgets.org}{wxWidgets}] 是一个相对轻量级的\CC{}图形库。
\item[\href{https://www.qt.io}{Qt}] 是非常流行的\CC{}图形应用开发框架。
\end{description}
其中的每一个都有足够多的文档和示例程序,互联网上也有足够多的讨论内容,可供学习使用。
\subsection{图形库的安装}
我们强烈建议,没有经验的同学在第一时间下载、安装这些库并且实际体验。安装过程可能会极端地痛苦和使人困惑,尤其是对于没有经验的同学来说。如果你遇到这方面的问题,欢迎向助教寻求帮助。
对于FLTK,
Windows用户可能需要安装\href{https://www.msys2.org}{MSYS2}才能从中得到预编译的库;
大部分的Linux发行版通过自己的包管理系统提供打包好的库和头文件;
macOS用户可以使用\href{https://brew.sh}{Homebrew}作为自己的包管理器。
当然,总是可以直接下载它的源代码然后自行编译——这其实不是一件困难的事情,但是想要完全理解整个过程,需要综合运用各位同学在计算机系的专业课(主要是\emph{计算机系统基础})上学到的知识。
对wxWidgets和Qt而言,在主流的操作系统下都有打包好的安装程序。
\section{关于开发环境}
课程项目本身并不限定开发环境。但是《高级程序设计》的OJ的评分服务器运行Linux操作系统,使用gcc 4.9.2作为编译器套件,使用\CC{}11作为\CC{}语言的标准。这一点是无法更改的。
......@@ -109,18 +120,20 @@ Windows是非常流行的操作系统,传统上它对开发者不是很友好
\subsection{集成开发环境}
\subsubsection{Visual Studio}
Visual Studio是Windows上非常流行的IDE(\textbf{I}ntegrated \textbf{D}evelopment \textbf{E}nvironment,集成开发环境),它可以用来开发\CC{}程序。不过它默认使用的编译器,MSVC,和gcc/clang的行为存在一定差异(尽管我们可以通过设置项目的编译选项让MSVC的行为和标准尽可能一致,或者在稍新一些的Visual Studio中选择使用clang作为编译器)。总之,如果对自己写的程序是否符合\CC{}标准没有信心,我们建议不要使用Visual Studio作为课程的主力开发环境,这可能会损害各位同学的OJ体验(比如在本地写的程序可以欢乐地跑起来,但是一传到OJ上就不能正常工作)。
\subsubsection{Visual Studio Code}
Visual Studio Code是非常流行的代码编辑器。通过加入一些插件,它可以很好地胜任《高级程序设计》课程中的开发工作。
\subsubsection{Qt Creator}
Qt Creator本来是为开发使用Qt库的\CC{}程序而设计(在这门课里让我们忽略QML吧)。但它也可以被当作是通常的\CC{}的IDE来使用,或许有些同学会喜欢它。
\subsubsection{CLion}
CLion也是可用的\CC{}IDE。
\subsubsection{IDE推荐}
如果对其他\CC{}的IDE感兴趣,可以尝试下面列出的这些:
\begin{description}
\item[\href{https://code.visualstudio.com}{Visual Studio Code}] 是非常流行的代码编辑器。通过加入一些插件,它可以很好地胜任《高级程序设计》课程中的开发工作。
\item[\href{https://www.qt.io/product/development-tools}{Qt Creator}] 本来是为开发使用Qt库的\CC{}程序而设计(在这门课里让我们忽略QML吧)。但它也可以被当作是通常的\CC{}的IDE来使用,或许有些同学会喜欢它。
\item[\href{https://www.jetbrains.com/clion/}{CLion}] 是JetBrains公司出品的著名系列IDE中的一个。你需要使用南京大学的学生邮箱来得到教育版本的许可证。
\end{description}
\subsection{其他有用的工具}
\begin{description}
\item[Address Sanitizer] 是一个开箱即用的内存安全错误检查工具。它对于找出\CC{}程序中的内存错误很有帮助。
\item[clang-format] 是一个代码排版工具。可以使用它把\CC{}代码排版成自己喜欢的样式。
\item[clang-tidy] 是一个代码风格检查工具。它可以就代码的不良风格给出警告。
\item[\texttt{-Wall}] 是gcc/clang编译器的编译选项。开启它将得到更多来自编译器的警告,这有助于在编写代码的过程中尽早发现问题。类似的选项还有很多。
\item[\href{https://github.com/google/sanitizers/wiki/AddressSanitizer}{Address Sanitizer}] 是一个开箱即用的内存安全错误检查工具,它被集成在包括MSVC在内的所有主流编译器中。它对于找出\CC{}程序中的内存错误很有帮助。
\item[\href{https://clang.llvm.org/docs/ClangFormat.html}{clang-format}] 是一个代码排版工具。可以使用它把\CC{}代码排版成自己喜欢的样式。
\item[\href{https://clang.llvm.org/extra/clang-tidy/}{clang-tidy}] 是一个代码风格检查工具。它可以就代码的不良风格给出警告。
\item[\texttt{-Wall}] 是gcc/clang编译器的编译选项。开启它将得到更多来自编译器的警告,这有助于在编写代码的过程中尽早发现问题。类似的选项还有很多,可以参考\href{https://stackoverflow.com/questions/5283894/recommended-w-flags-for-building-c-with-gcc}{这里}或者查询编译器的在线手册(manual)
\end{description}
\section{关于\CC{}}
......@@ -130,5 +143,5 @@ CLion也是可用的\CC{}IDE。
\item[\emph{Programming -- Principles and Practice Using \CC{}}] 适合编程基础薄弱的同学。这本书的优势在于,它以FLTK为基础,介绍了图形库的基本思想。
\item[\emph{\CC{} Primer}] 适合基础相对薄弱的同学。这本书写得很详细,适合作为入门读物。
\end{description}
除此之外,也可以参考互联网上的一些资料,比如\emph{\CC{} Core Guidelines}
除此之外,也可以参考互联网上的一些资料,比如\href{https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#S-abstract}{\emph{\CC{} Core Guidelines}}
\end{document}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment