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++ 解析器的全部功能。您甚至可以摆脱正则表达式或其他东西。
也就是说,这似乎是一件很奇怪的事情,您可能需要考虑是否可以重新安排事情以避免不得不这样做。
推荐阅读
- python - Html 图标不会显示在我网站上的某些页面上,但会显示在其他页面上
- c# - 不允许加载本地资源:ASP.NET Core 中的 file://
- flutter - 在颤动中显示一个数字作为幂或另一个数字
- java - 使用 Spring JPA 和 Hibernate 更新数据库分区上的记录时出错
- c# - 从另一个文件访问@functions
- mysql - 如何在 BigQuery 中从时间中提取分钟?
- c - c中线程程序的valgrind printf()错误
- rust - 如何为令牌 Vec 实现 nom::InputIter?
- python - Wxpython:将所有滚动面板保存为图像
- reactjs - Apollo 客户端查询参数函数返回未定义