我正在尝试使用最初用C编写的软件在Visual C ++中编译。这是我到目前为止的代码:
#include "timer.h"
FILE * timerFP = stdout;
int timerCount = 0;
double time_Master = 0.0;
static tsc_type tsc_Master;
void Timer_Start(void)
{
readTSC(tsc_Master);
}
void Timer_Stop(void)
{
tsc_type tsc_Master2;
readTSC(tsc_Master2);
time_Master += diffTSC(tsc_Master,tsc_Master2);
}
但是Visual C ++给了我以下错误:
error C2099: initializer is not a constant.
我该如何解决这个问题?谢谢。
答案 0 :(得分:2)
stdout
,例如main
。您需要在FILE *timerFP;
int main(void) {
timerFP = stdout;
/* ... */
}
函数内部(或任何适合您的初始化函数)这样做:
FILE *timerFP(void) {
return stdout;
}
或者,您可以将其定义为函数:
{{1}}
典型的编译器可以很容易地优化函数调用。
答案 1 :(得分:1)
正如评论者已经指出的那样,stdout
不一定是常数。例如,在MSVC ++ 2013中,它在%PROGRAMFILES(x86)%\Microsoft Visual Studio 12.0\VC\include\stdio.h
的第150行中定义如下:
#define stdout (&__iob_func()[1])
这意味着它涉及函数调用。初始化程序需要是编译时常量,stdout
不是。
(请注意,这会在不同版本的MSVC ++之间发生变化,因此您的版本可能会有所不同)