c++ - 如何修改预构建的字符串

标签 c++ visual-studio visual-c++

假设我有以下包含字符串的代码

const char* fmt = L"%s";

int main()
{
    printf(fmt, L"hello");
}

在我编译之前,我希望发生一个事件来转换我的源代码,这样所有的字符串都被一个函数包装。最终代码应该是这样的

const char* fmt = w2mb(L"%s");

int main()
{
    printf(fmt, w2mb(L"hello"));
}

Intelisense 可以识别字符串,所以我知道这是可能的。我该怎么做呢?我认为它与预构建事件有关。

最佳答案

预构建事件只是在运行编译器之前运行的命令行命令。如果你想用一个函数包装你程序中的所有字符串常量,你将需要编写一个预处理器来执行它。反过来,这将需要连接到 C++ 编译器前端。我知道 Roslyn 为 C# 做了这样的事情,但我不知道 C++ 有什么可用的。您可能会查看 clang,我认为这是 Visual Studio Code 用于其插件的;据我所知,MSVC 不是开源编译器。

当然,如果您正在处理以特别好的方式格式化的有限选择的文件,您可能不需要 C++ 解析器的全部功能;你甚至可以通过正则表达式或其他东西逃脱。

也就是说,这似乎是一件很奇怪的事情,您可能想考虑是否可以重新安排事情以避免必须这样做。

关于c++ - 如何修改预构建的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57367546/

相关文章:

Visual Studio 2013 和 2015 中的 C++ 编译器错误 C2280 "attempting to reference a deleted function"

c++ - 支持类中的每个循环

python - 需要哪个 $path 以便 g++/pybind11 可以找到 Python.h?

c++ - 为什么我不能创建流缓冲区的拷贝?

c++ - VC++ fatal error LNK1168 : cannot open filename. exe for writing

visual-studio - Visual Studio 2017 找不到 typescript 编译器?

c++ - 尝试在 C++ 中创建简单线程时出错

c++ - 链接库C++

c# - 设置 [PARAMETER] 的值时意外结束 - Visual Studio 说字符串不是有效的 JSON,而在线验证器说它是

visual-c++ - Visual C++/CLI (CLR) 空指针