对不起,如果一遍又一遍地问这个问题,但我只是没有得到这个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应用程序,但它没有正确设置路径。我不得不玩配置才能使它工作,但不管怎样,谢谢!
答案 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"