gpt4 book ai didi

c - 使用预处理器将 char 数组替换为索引

转载 作者:太空宇宙 更新时间:2023-11-04 04:00:07 24 4
gpt4 key购买 nike

我有一组已知的、预定的函数调用

FUNC_A("ABCD");
FUNC_A("EFGH");

我希望做的是类似

#define FUNC_A("ABCD")     0
#define FUNC_A("EFGH") 1
#define FUNC_A(X) 0xFF

这样整个东西在编译之前就被整数替换了,我可以关闭该值而不必存储字符串或在运行时进行比较。我意识到我们不能在预处理器中执行此操作,但只是想知道是否有人遇到过一些巧妙的方法来解决这个看似可以解决的问题。

最佳答案

如果需要,您可以手工制作比较,但这会很乏味。为简单起见,假设我们要对字符串 "AB" 执行此操作:

#define testAB(X) ((X) && (X)[0] == 'A' && (X)[1] == 'B' && !(X)[2])

当字符串等于"AB" 时返回1,否则返回0,同时注意字符串是正确的长度,不能访问超出数组边界等。

您唯一需要担心的是参数 X 被多次求值。如果您传入字符串文字,这不是问题,但对于具有副作用的表达式来说会是个问题。

对于字符串文字,任何体面的编译器都应该能够在编译时替换这样的表达式。

关于c - 使用预处理器将 char 数组替换为索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12692699/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com