gpt4 book ai didi

c - 使用 C 预处理器根据以后的扩展创建静态大小的数组

转载 作者:行者123 更新时间:2023-12-04 09:07:50 25 4
gpt4 key购买 nike

我正在尝试手动检测某些 C 或 C++。为此,我想声明一些具有静态大小数组的结构,这些数组的大小与我稍后在文件中手动插入的计时语句的数量相匹配。用于说明的简单版本:

double array[NUM_TIMESTAMPS];
#define TIMESTAMP() array[__COUNTER__] = get_timestamp();
TIMESTAMP()
TIMESTAMP()
#define NUM_TIMESTAMPS __COUNTER__

使用 cpp -P 这扩展为:

double array[NUM_TIMESTAMPS];
array[0] = get_timestamp();
array[1] = get_timestamp();

当然,这不会通过编译器,因为 NUM_TIMESTAMPS 不会在 c 预处理器的单次传递中展开。有没有办法将 NUM_TIMESTAMPS 的扩展推迟到第二次解析,或者稍后在文件中声明数组?具有这种检测的代码不会投入生产,因此欢迎进行肮脏的黑客攻击。

最佳答案

您可以尝试使用 extern 数组:

extern double array[];    
#define TIMESTAMP() array[__COUNTER__] = get_timestamp();

int main() {
TIMESTAMP();
TIMESTAMP();
return 0;
}

#define NUM_TIMESTAMPS __COUNTER__
double array[NUM_TIMESTAMPS];

关于c - 使用 C 预处理器根据以后的扩展创建静态大小的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32439712/

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