首页 > 解决方案 > 如何修改字符串预构建

问题描述

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

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++visual-studiovisual-c++

解决方案


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

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

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


推荐阅读