#include <stdio.h>
#include <stdlib.h>
#include <time.h>
static struct tm createDate(unsigned day, unsigned mon, int year) {
struct tm b = {0,0,0,day,mon-1,year-1900}; return b;
}
static int dateExceeded(unsigned day, unsigned mon, int year) {
struct tm b = createDate(day,mon,year);
time_t y = mktime(&b), now;
time(&now); // error C2143: syntax error : missing ';' before 'type'
double diff = difftime(y, now) / (60 * 60 * 24); // error C2065: 'diff' : undeclared identifier
return (diff < 0);
}
static void randomEvent(){
srand(time(NULL));
if ( rand()%10) {
printf("Do something here\n"); // C2143: syntax error : missing ';' before 'type'
}
}
Morpheous
问问题
872 次
4 回答
5
如果将其编译为 C89 代码,则应在块的开头声明变量。您不能double diff
在块的中间声明:
static int dateExceeded(unsigned day, unsigned mon, int year) {
double diff;
struct tm b = createDate(day,mon,year);
time_t y = mktime(&b), now;
time(&now);
diff = difftime(y, now) / (60 * 60 * 24);
return (diff < 0);
}
于 2009-08-09T12:32:58.623 回答
0
嗯,我似乎无法重现这个。使用您的确切代码:
1>------ Build started: Project: so_1251288, Configuration: Debug Win32 ------
1>Compiling...
1>so_1251288.cpp
1>c:\users\matthew iselin\documents\visual studio 2008\projects\so_1251288\so_1251288\so_1251288.cpp(21) : warning C4244: 'argument' : conversion from 'time_t' to 'unsigned int', possible loss of data
1>Linking...
1>Build log was saved at *snip*
1>so_1251288 - 0 error(s), 1 warning(s)
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
我假设您使用的是 Visual C++。你用的是什么版本?你的环境配置成什么?
我唯一能想到的是,您可能无意中启用了 Unicode 而不是多字节字符编码......但这不应该导致您看到的错误。
编辑:我什至无法通过创建 Visual C++ CLR 应用程序并直接粘贴您的代码来重现。我们需要更多信息才能诊断问题。
编辑 2:实际上,当我编译为 C (/TC) 而不是 C++ (/TP) 代码时,我可以重现。正如已经提到的,C89 要求在函数的开头定义变量,这会导致您的代码失败。
于 2009-08-09T12:33:36.830 回答
0
代码中也有错误。在程序的生命周期中,您应该只调用一次 srand。如果您每次在 rand() 之前调用 srand,则可能会一遍又一遍地获得相同的值。
于 2009-08-09T12:53:39.313 回答
0
ISO C90 forbids mixed declarations and code
于 2009-08-09T13:05:04.437 回答