我正在尝试对一些不同的算法设计进行基准测试,并且我希望通过在内部使用用户强制类型安全类型进行不安全来概括我的函数。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void * foo1(unsigned n)
{
unsigned i;
unsigned long sum = 0;
void * psum = ∑
for(i = 0; i < n; ++i)
++sum;
return psum;
}
...
int main(void)
{
int i;
unsigned n;
unsigned long sum = 0;
void *(*foo[6])(unsigned) = {&foo1, &foo2, &foo3, &foo4, &foo5, &foo6};
unsigned n_max[6] = {1000000001, 1000001, 10001, 1000001, 101, 1001};
clock_t start, end;
for(i = 0; i < 6; ++i){
n = 1;
do{
start = clock();
sum = *(unsigned long *)(*foo[i])(n);
end = clock();
printf("%d|%lu|%.6f\n", n, sum, (double) (end - start) / CLOCKS_PER_SEC);
n *= 10;
}while(n < n_max[i]);
}
return 0;
}
我的问题具体是关于如何让我的foo()函数比它们更通用,使我能够为每种类型使用它们。
为此,我有了一个想法,但我不确定;如果签名数据类型被转换为无符号数据类型,然后由任何其他无符号数据类型修改,算术执行是否会发生,或者是否会发生错误的数学运算?