定义我的问题的最简单方法是我正在尝试实现一种机制来检查是否已使用相同的字符串(或一对(数字,字符串))。我希望使用 C 预处理器以智能方式实现此机制。我还希望这种机制在调试模式下出现冲突或运行时错误时(通过检查断言)给我编译错误。我们不希望开发人员在添加消息时犯错误,因为每条消息都应该是唯一的。我知道这可以通过计算哈希来完成,或者例如crc/md5但这种机制很容易发生冲突,我需要避免这种情况。至关重要的是,每条消息只能使用一次。
该机制的行为示例:
addMessage(1, "Message1") //OK
addMessage(2, "Message2") //OK
.
.
.
addMessage(N, "MessageN") //OK
addMessage(2, "Message2") //Compile error, Message2 has already been used
替代行为(调试代码时):
addMessage(1, "Message1") //OK
addMessage(2, "Message2") //OK
.
.
.
addMessage(N, "MessageN") //OK
addMessage(2, "Message2") //Assertion failed, because Message2 has already been used
首选的方法是巧妙地使用#define and #undef指令。一般来说,预处理器应该以聪明的方式使用(我不确定这是否可能)也许可以通过适当的宏组合来实现?任何 C 预处理器黑客可以帮助我解决这个问题吗?
//编辑:我需要这些消息在全球范围内是唯一的,而不仅仅是在一个代码块内(如 if 语句的函数)。
//EDIT2:问题的最佳描述是我有 100 个不同的源文件,我想使用预处理器进行检查(或者可能是除了每次在编译开始时使用脚本解析源文件之外的其他机制)如果多次使用字符串(或预处理器定义),这将非常耗时,并且会为足够复杂的项目添加另一个阶段。我仍然不知道该怎么做(我知道这可能根本不可能,但我希望它实际上是不可能的)。