初始化程序不是常量错误

时间:2012-05-09 18:40:18

标签: c visual-c++ console

对不起,如果一遍又一遍地问这个问题,但我只是没有得到这个C代码有什么问题,因为直到有一天它才开始抱怨“C2009:Initializer”在这个标题的第9行和第10行中不是常数:

// CONIO2.H
#ifndef CONIO2_H_INCLUDED
#define CONIO2_H_INCLUDED
#ifndef _WINDOWS_
#include <windows.h>
#endif

void clrscr(void) {
    int Written = 0;
    COORD ord;
    ord.X = 0;
    ord.Y = 0;
    FillConsoleOutputCharacter(GetStdHandle(STD_OUTPUT_HANDLE), 32, 80 * 25, ord, &Written);
}

//MAIN.C
#include <stdio.h>
#include <conio2.h>

编辑:我发现了错误。我使用Eclipse CDT插件来开发C应用程序,但它没有正确设置路径。我不得不玩配置才能使它工作,但不管怎样,谢谢!

3 个答案:

答案 0 :(得分:1)

COORD ord;

您缺少COORD类型别名的定义。我的猜测是你没有包括正确的标题:Wincon.h

请在此处查看要使用COORD类型别名的要求(要包含的标头): http://msdn.microsoft.com/en-us/library/windows/desktop/ms682119(v=vs.85).aspx

编辑:此外,您的#ifndef指令似乎存在问题:标题中有两个#ifndef但只有一个#endif。对于每个#ifndef,您需要一个#endif。如果未定义windows.h,您确定要包含_WINDOWS_吗?

答案 1 :(得分:0)

此链接描述了错误以及一些示例。它可能会帮助你。根据链接,编译器在程序开始时初始化非自动变量,并且初始化它们的值必须是常量。 http://msdn.microsoft.com/en-us/library/t801az8a(v=vs.80).aspx

答案 2 :(得分:0)

您的代码有几个预处理器怪异。以下代码适用于Windows的标准 C编译器。请注意,VC ++不是标准的C编译器,所以它可以抛出各种奇怪的错误。

// CONIO2.H
#ifndef CONIO2_H_INCLUDED
#define CONIO2_H_INCLUDED

#include <windows.h>

void clrscr (void) 
{
  DWORD Written = 0;
  COORD ord;
  ord.X = 0;
  ord.Y = 0;
  FillConsoleOutputCharacter (GetStdHandle(STD_OUTPUT_HANDLE), 
                              32, 
                              80 * 25, 
                              ord, 
                              &Written);
}

#endif /* CONIO2_H_INCLUDED */

//MAIN.C

#include <stdio.h>
#include "conio2.h"