检查预处理器宏是否为 C 字符串
Check that preprocessor macro is a C-string?
我有一些C++代码,如下所示:
std::string DataDirHelper(const std::string& file) {
#ifndef CRYPTOPP_DATA_DIR
return file;
#else
std::string dataDir(CRYPTOPP_DATA_DIR);
...
#endif
}
有没有办法测试CRYPTOPP_DATA_DIR
是C-stirng(而不是int
)?
如果是这样,我该怎么做?
最简单的解决方案是:
std::string DataDirHelper(const std::string& file) {
#ifndef CRYPTOPP_DATA_DIR
return file;
#else
std::string dataDir("" CRYPTOPP_DATA_DIR);
...
#endif
}
当CRYPTOPP_DATA_DIR
是字符串文本时,编译器会将其与相邻的空字符串合并。当它不是字符串文字时,如果宏足够糟糕(带有一些前导逗号等等),它仍然可以编译。
或者,我们可以使用static_assert
需要字符串文字作为参数的要求。因此,我们可以编写以下代码:
std::string DataDirHelper(const std::string& file) {
static_assert(true, CRYPTOPP_DATA_DIR);
std::string dataDir("" CRYPTOPP_DATA_DIR);
...
}
如果CRYPTOPP_DATA_DIR
不是字符串文本,您将看到如下错误消息:
foo.cc:12:9: error: expected string literal
static_assert(true, CRYPTOPP_DATA_DIR);
^~~~~~~~~~~~~~~~~
相关文章:
- C++-字符串是否包含一个带有简单循环的单词
- 将常量字符串添加到非常量字符串是否会给出常量字符串
- 检查字符串是否"null" C++
- 使用XOR查找O(n)-解决方案中的两个字符串是否为变位符
- 检查字符串是否为整数
- 使用 SET(C++) 检查两个给定字符串是否是字谜时出现运行时错误
- 如何检查字符串是否正确以将其转换为 int?
- 程序检查字符串是否只包含 1 和 0?
- 检查字符串是否是拉平德罗姆
- 尝试使用 indexOf 创建一个 if 语句来检查字符串是否包含字符.有一点麻烦
- 通过默认复制构造函数比较 C++ 字符串是否会影响性能,原因为何?
- gtest:检查字符串是否等于两个字符串之一
- 如何检查字符串是否包含所有这些:数字、字母和特殊字符
- 如何检查字符串是否以C++中的"ed"结尾;
- 字符串是否在其构造函数中复制数据
- 检查字符串是否是数字,然后将该数字转换为 int?
- 如何检查一个字符串是否包含多个其他字符串?
- 检查字符串是否仅包含字母
- 如何根据一个特定字母的出现来确定两个字符串是否相等?
- 查找字符串是否包含字符串向量的任何一个元素的最佳方法