Skip to content

W1 环境配置与课程要求

Visual Studio 配置

下载(或更改)Visual Studio Community(官网安装内容选择「使用 C++ 的桌面开发

安装 FileEncoding 插件。安装完成后,右下角会显示当前编码与行尾。

创新项目时新项目选择「空项目编译器选择 “Debug/x86在「源文件」中右键新建项,按作业要求命名。

源程序最后不要添加 system("pause");getchar(); 等语句暂停。

Dev-C++ 配置

使用定制版的 Bloodshed Dev-C++,编译选择 “TDM-GCC 9.2.0 32-bit Debug

TIP

如果你不想用这么古早的 IDE,你也可以使用同为 Dev-C++ 二改的 小熊猫 C++,并搭配笔者的项目 RedpandaTjPatch 来注入同济高程专用的编译器版本。

作业要求

作业不是 OJ 判题,为人工 + 脚本辅助。严查严打抄袭,因此要保护好自己的代码。

编译平台与禁止使用的功能

使用 VS 调通之后再用 Dev-C++ 编译验证。

不允许使用 auto 关键字。

格式要求

纯唐诗吧

CAUTION

此要求仅为高程作业的提交要求,且并不合理。此处只是记录课程要求,本仓库内的代码不会遵守此要求(就算是与该课程相关的内容中的代码也不会遵守此要求有关本仓库的代码自动格式化配置,请参阅 仓库贡献指南 / 写作规范 / 代码

作业提交强制要求编码为 GBK,行尾为 CRLF,否则当次作业记零分。

码风上,强制规定:大括号前必须换行,逻辑分支必须换行,不允许任何形式的压行。违反格式规定的,该次作业分数 -20%。

标准示范:

cpp
#include<iostream>
using namespace std;
int main()
{
    cout << "Hello, world." << endl;
    return 0;
}
错误示范
cpp
#include<iostream>
using namespace std;
int main() {
    cout << "Hello, world." << endl;
    return 0;
}
cpp
#include<iostream>
using namespace std;
int main()
{ cout << "Hello, world." << endl; return 0; }
cpp
#include<iostream>
using namespace std;
int main()
{
    cout
      <<
      "Hello, world."
      << endl;
    return 0;
}
cpp
#include<iostream>
using namespace std;
int main()
{
    cout  \
      <<  \
      "Hello, world."  \
      << endl;
    return 0;
}

标准示范:

cpp
int max (int x, int y)
{
    int z;
    if (x > y)
        z = x;
    else
        z = y;
    return z;
}
错误示范
逻辑分支或循环体前不换行
cpp
int max (int x, int y)
{
    int z;
    if (x > y) z = x;
    else z = y;
    return z;
}

TIP

笔者的 Node 项目 TJgcPreprocessor 是专用于此课程的 C/C++ 代码预处理器,可以自动处理编码、行尾和码风要求(码风整理使用正则与 clang-format 实现你也可以考虑自行配置,但需注意:cincout 折行问题无法由格式化工具自动处理,下面的配置只能保证不额外折行

下面给出适用上述要求的 .clang-format 配置:

yaml
---
BasedOnStyle: GNU
AccessModifierOffset: -4
AlignConsecutiveMacros:
  PadOperators: true
AlignEscapedNewlines: Left
AllowAllArgumentsOnNextLine: false
AllowAllParametersOfDeclarationOnNextLine: false
AllowShortFunctionsOnASingleLine: None
AlwaysBreakAfterDefinitionReturnType: None
BinPackArguments: false
BinPackParameters: false
BreakBeforeBinaryOperators: NonAssignment
BreakBeforeBraces: Allman
ColumnLimit: 0
Cpp11BracedListStyle: true
IndentCaseLabels: true
IndentWidth: 4
SpaceBeforeParens: ControlStatements
Standard: c++11
Language: Cpp
AllowAllConstructorInitializersOnNextLine: false
AlwaysBreakAfterReturnType: None
KeepEmptyLinesAtTheStartOfBlocks: false
SpacesInParentheses: false