【发布时间】:2019-06-28 11:39:01
【问题描述】:
我正在使用 C++ 开始一个项目,在少数学校项目之外我之前没有使用过 - 远不及我现在要处理的范围。
我的目标是尽最大努力遵循C++ Core Guidelines,因为我努力避免错误、提高性能,最重要的是:提高代码的可维护性。
我遇到了字面上数百的问题,从我的 g++ / Clang++ 版本不正确到标准库未找到到 g++ 使用错误版本的 C++ 进行编译到非常基本的功能表现不如预期 - 而且我什至还没有开始研究自动工具,所以我预计会有更多令人头疼的问题。
不过,这个问题只针对 C++ 核心指南的一部分。 Interfaces 6: Prefer Expects() for expressing preconditions
我尝试编写以下简单代码:
#include <iostream>
using namespace std;
int square(int x) {
Expects(x > 0);
return x * x;
}
int main() {
cout << square(3) << endl;
return 0;
}
这在 g++ 中引发了错误:
$> g++ -std=c++17 main.cpp
main.cpp: In function ‘int square(int)’:
main.cpp:7:2: error: ‘Expects’ was not declared in this scope
Expects(x > 0);
^~~~~~~
-> [1]
我也尝试过使用 Clang,但它有一个完全不同(且不相关)的问题:
$> clang++ -x c++ main.cpp
main.cpp:1:10: fatal error: 'iostream' file not found
#include <iostream>
^~~~~~~~~~
1 error generated.
-> [1]
我还没有想出如何解决这个问题,所以我不打扰它。
【问题讨论】:
-
@Galk 没有这样的文件或目录。我需要
sudo apt-get install来获取 GSL 的东西吗? -
与您的问题无关,但更现代的构建生成器可能是个好主意。我更喜欢 Meson,但 CMake 是事实上的标准。两者都可以帮助您解决 iostream 问题,因为它们会找到所有正常的东西。
-
我现在实际上正在阅读 CMake。我绝对需要一个更好的构建系统。我对 C++ 开发还很陌生,所以我正在重新学习我多年来使用 JavaScript 和 Python 搞清楚的所有内容(存在哪些构建工具、存在哪些依赖项管理器、人们如何构建项目等)
标签: c++ c++17 cpp-core-guidelines