代码无法编译:错误C2099:初始化程序不是常量

时间:2014-12-20 04:24:53

标签: c

我正在尝试使用最初用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.

我该如何解决这个问题?谢谢。

2 个答案:

答案 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 ++之间发生变化,因此您的版本可能会有所不同)