用于计算文件中字符串数的预处理器
Preprocessor to count number of strings in file
我想要一个宏(或任何其他有效的宏),它可以遍历C/C++文件,并计算特定字符串(在物理C/C++文件中)的出现次数。
#define numInFile(str) [???]
int main() {
printf("blahblah");
printf("You've used printf %d times", numinFile ("printf") - 2); //-2 account for this call
return 0;
}
编辑:问题最初是针对使用此功能进行退出调用而提出的。它现在可以推广到任何用途。
如果我理解正确,您希望有唯一的错误代码,可以追溯到错误发生的行?
我将回答Y问题,而不是你的X问题:
您可以使用__LINE__
。CCD_ 2扩展为当前行号的整数常数。您可以将#define
退出为:
#define quit(code) (quit)(__LINE__+(code))
void (quit)(code) { // seperate func in case you want to do more
exit(code);
}
但请记住,流程的退出代码并不是对此类信息进行编码的最佳方式。在POSIX上,只有出口代码的低8位才保证可用。但是,由于您已经使用300作为基本值,我假设您使用的是Windows或其他系统,而这不是一个问题。
出于调试目的,也可以考虑在发生错误时(可能带有命令行标志)写入stderr
。
如果exit
只是一个示例,并且您打算在应用程序中使用它,则可以在出现错误时将__LINE__
和__FILE__
保存在全局(或_Thread_local
)变量中,并在错误代码中仅存储退出原因。
关于你的X问题,预处理器不会做这样的事情。您将不得不将这些任务卸载到构建脚本可以调用的shell/perl/任何脚本中。
没有任何内置功能。可以将某些东西连接到构建系统,以生成具有相关计数的头文件,并使用宏从该头文件中提取正确的值。
然而,基于各种unix系统对退出值的范围进行限制的事实(我正在查看的linux机器将只使用最低的8位,这意味着exit(256)
将与exit(0)
相同),您可能根本不想这样做,最好使用一个发出编译单元名称的日志宏,它被展开的行,然后使用CCD_ 11。
相关文章:
- 错误:无效的预处理指令 #i 的意思是 #if?
- C++预处理会生成变量成员、资源库和映射
- 使用预处理指令检查是否包含标头?
- 预处理的 C/C++ 文件是否特定于计算机?
- 使用 GCC 对 C 文件进行部分预处理(不删除 "define" 指令)
- 在 CPLEX 中求解线性规划,无需剪切和预处理
- CPP -D 选项,用于预处理 Fortran 代码
- 错误:粘贴"tmp_UINT"和"+"未提供有效的预处理令牌
- 任务计划程序库的预处理不起作用 - 多定义错误
- Eclipse 问题 - 编译期间不考虑 .c 和 .cpp 文件中定义的预处理
- 使用python预处理后,C++(opencv)中的垫子类型数据与image_to_array相同
- Howo 使用 cl 预处理为 masm 组装生成一个单独的文件
- 我有一个预处理的 C/C++ 源文件 (cacti.i).如何从这个 .i 文件生成可执行二进制文件,以便我可以像 ./
- 如何使用Visual Studio C/C++编译器(cl.exe)来预处理我的objective-C代码
- 是具有预处理前分支实现的结构违反ODR
- 与不完整的Cholesky预处理的共轭梯度返回特征库的意外错误
- Visual Studio C - 无法输出预处理文件
- 在海湾合作委员会中加快宏观预处理的任何方法
- Xmllint未设置,而在路径中找不到XMLLINT;跳过XML预处理
- 当头文件被预处理时是否有一个预处理器选项显示?