提问人:Andrew Truckle 提问时间:10/3/2021 最后编辑:Adrian MoleAndrew Truckle 更新时间:10/3/2021 访问量:258
如何定义 gsl:narrow 编译__cpp_exceptions?
How do I define __cpp_exceptions for gsl:narrow to compile?
问:
我又感到困惑了:(
我看过这个讨论:
我是尝试使用 GSL 的新手。我已将 GSL 文件夹复制到我的 PC 并添加到我的文件中。#include
stdafx.h
但该命令未公开。然后我看到它指的是宏/标记。gsl:narrow
__cpp_exceptions
我尝试在项目设置的预处理器列表中使用它,但它不喜欢它。#define
我该如何激活它?__cpp_exceptions
gsl 头文件:
#ifndef GSL_GSL_H
#define GSL_GSL_H
#include <gsl/algorithm> // copy
#include <gsl/assert> // Ensures/Expects
#include <gsl/byte> // byte
#include <gsl/pointers> // owner, not_null
#include <gsl/span> // span
#include <gsl/string_span> // zstring, string_span, zstring_builder...
#include <gsl/util> // finally()/narrow_cast()...
#ifdef __cpp_exceptions
#include <gsl/narrow> // narrow()
#endif
#endif // GSL_GSL_H
我正在尝试使用 Visual Studio 2022 预览版编译 MFC C++ 项目。
答:
2赞
Adrian Mole
10/3/2021
#1
MSVC 编译器是否预定义宏取决于 Visual Studio 项目的设置(即是否启用了 C++ 异常)。__cpp_exceptions
可以通过右键单击“解决方案资源管理器”窗格中的项目并选择“属性”命令来检查/更改相关设置。
在弹出的弹窗中,打开左侧导航树中的“C/C++”节点,选择“代码生成”子节点。然后,在右侧窗格中,确保“启用 C++ 例外”选项设置为“是 (/EHsc)”(其他种类的“是”选项也可能有效):
(注意:这适用于 Visual Studio 2019。我的 PC 上没有安装 V/S 2022,所以我无法在该版本中检查它——但我想这个过程非常相似。
以下简短的控制台模式程序演示了更改该设置所导致的差异:
#include <iostream>
int main()
{
#ifdef __cpp_exceptions
std::cout << "yes"; // With "Yes (/EHsc)"
#else
std::cout << "no"; // With "No"
#endif
std::cout << std::endl;
return 0;
}
评论
0赞
Andrew Truckle
10/3/2021
都很好。谢谢!
评论