2

抱歉,如果这个问题被反复询问,但我只是不明白这段 C 代码有什么问题,因为它编译时没有问题,直到有一天它开始在第 9 行和第 10 行抱怨“C2009:Initializer is not a constant”这个标题:

// 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 应用程序,但它没有正确设置路径。我必须使用配置才能使其正常工作,但无论如何谢谢!

4

3 回答 3

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_未定义时才包含?

于 2012-05-09T18:53:22.580 回答
0

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

于 2012-05-09T18:45:42.513 回答
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"
于 2012-05-09T20:08:23.383 回答