为什么声明一个时钟类型的整数会改变我的C程序?

为什么声明一个时钟类型的整数会改变我的C程序?,c,C,实际上,我能够找出我的程序有什么问题 我可以通过添加以下行来中断程序: clock_t a_clock; 我给这个变量取什么名字并不重要,只要它是clock\t类型,我就声明它 我不必给它分配任何东西,甚至不必尝试给我的程序计时 这是整个程序的粘贴箱。 您可以尝试自己编译和运行该程序。 如果您取出“时钟”行,它将计算PI到合理的精度: 以下是PI的错误计算,我的程序输出: Here is my_init 3533980296 Skipped first 100 results Calcula

实际上,我能够找出我的程序有什么问题

我可以通过添加以下行来中断程序:

clock_t a_clock;
我给这个变量取什么名字并不重要,只要它是clock\t类型,我就声明它

我不必给它分配任何东西,甚至不必尝试给我的程序计时

这是整个程序的粘贴箱。 您可以尝试自己编译和运行该程序。 如果您取出“时钟”行,它将计算PI到合理的精度:

以下是PI的错误计算,我的程序输出:

Here is my_init 3533980296
Skipped first 100 results
Calculating PI from random numbers
total_count 1610725872 c_count 78541369
x 0.071707 y -0.055589
Guess for PI = 0.195046 with 100000000 iterations
使用以下工具进行编译:

$gcc-O3-std=c99-Wall-lm test.c
test.c:59:9:警告:“total_count”在此函数中未初始化使用[-Wuninitialized]
整数总计数,c计数=0;
(还有一些关于未使用代码的无害警告)

也就是说,您未初始化
total_count
,只需将其设置为
0
,即可正常工作:

int total_count=0,c_count=0;

请记住,使用未初始化的变量是未定义的行为。通过声明一个额外的变量改变结果的事实只是偶然的。< /P>请发布确切的错误消息,并且该链接不为我打开,在代码中张贴使用编辑链接的代码。首先,这是C++,而不是C.Cuth>(int计数器=0;计数器< Num;计数器+)<代码>无效的C代码,除非他们在我的机器上编译并运行的更新版本的standard.Compiled中允许它(Windows 7上的MinGW gcc 4.8.1,std=c99)。它不起作用,但也没有崩溃。@GiulioFranco,不,它是C。只是用于编译问题的C99标准,包括确切的错误消息(如@iharob请求)以及编译器(版本)和平台。哇,我的
gcc
没有显示此警告。我只是用
cppcheck
@SamProtsenko找到了它:哦,我忘了
-O3
。这增加了额外的变量寿命分析,并允许更多的警告。@rodrigo:我不知道,谢谢。顺便说一句,它也适用于
-O2
,这是一种更健壮、更可靠的优化级别。@rodrigo:您可能还需要添加
-lm
,因为如果不明确指定与
libmath
的链接,此程序编译将无法在某些系统上运行(如我的Debian测试)。但我不确定它在作者使用的Windows机器上是否正确。@SamProtsenko我使用的是mac!我宣布了数学。h的事情!