如何在 gcc 4.9.2 中创建字符串常量?
How can I create a string constant in gcc 4.9.2?
我 运行 在 Arch Linux 上使用 GCC 4.9.2,我在编译以下代码时遇到了问题:
#ifndef WORLD_H
#define WORLD_H
#include <string.h>
#include <stdio.h>
//#include "removeBuffering.h"
//World dimensions
#define WORLD_WIDTH 80
#define WORLD_HEIGHT 20
//World block types
#define FLAT_LAND '-'
//Instructions
#define MOVE_UP 'w'
#define MOVE_DOWN 's'
#define MOVE_RIGHT 'd'
#define MOVE_LEFT 'a'
#ifndef WIN32
#define COMMAND "clear" //Clears a linux console screen
#else
#define COMMAND "cls" //Clears a windows console screen
#endif
#define wipe() system( COMMAND )
它在我的 koding.com VM 上工作,它使用 GCC 4.8.2 但在我的本地机器上,它生成以下错误:
include/world.h:17:17: error: expected declaration specifiers or ‘...’ before string constant
#define COMMAND "clear" //Clears a linux console screen
我认为这是由于 GCC 4.9 中的某种更改所致,但我似乎找不到任何关于它的有用信息,因此非常感谢任何帮助
运行 通过 gcc -E
-- 这将扩展结果,此时一切都应该变得清晰。
在给出我自己的答案之前,我想向您简要介绍一下我的代码在生成上述错误消息时的外观。这里是 world.h:
#ifndef WORLD_H
#define WORLD_H
#include <string.h>
#include <stdio.h>
//#include "removeBuffering.h"
//World dimensions
#define WORLD_WIDTH 80
#define WORLD_HEIGHT 20
//World block types
#define FLAT_LAND '-'
//Instructions
#define MOVE_UP 'w'
#define MOVE_DOWN 's'
#define MOVE_RIGHT 'd'
#define MOVE_LEFT 'a'
#ifndef WIN32
#define COMMAND "clear" //Clears a linux console screen
#else
#define COMMAND "cls" //Clears a windows console screen
#endif
int cursorXPos;
int cursorYPos;
char world[WORLD_HEIGHT][WORLD_WIDTH+1]; //Space for null terminator
void initializeWorld();
void printWorld();
void getInput();
//void printHelp();
#endif
这里是world.c(为了保存space我清空了函数)
#include "world.h"
void initializeWorld()
{
}
void printWorld()
{
}
void getInput()
{
}
system(COMMAND);
printWorld();
这里是 GCC 提供的完整错误列表:
In file included from src/world.c:1:0:
include/world.h:17:17: error: expected declaration specifiers or ‘...’ before string constant
#define COMMAND "clear" //Clears a linux console screen
^
src/world.c:78:10: note: in expansion of macro ‘COMMAND’
system(COMMAND);
^
src/world.c:79:3: warning: data definition has no type or storage class
printWorld();
^
src/world.c:79:3: error: conflicting types for ‘printWorld’
src/world.c:13:6: note: previous definition of ‘printWorld’ was here
void printWorld()
根据我的经验,处理列表中的第一个错误总是一个好主意,所以除了第一个错误之外我没有太注意任何其他事情,这就是为什么我在第一名。我最终尝试按照 Carey Gregory 和 immibis 的建议解决后来的错误。
重要的是:
src/world.c:79:3: warning: data definition has no type or storage class
printWorld();
^
src/world.c:79:3: error: conflicting types for ‘printWorld’
src/world.c:13:6: note: previous definition of ‘printWorld’ was here
void printWorld()
一旦我移动了对 printWorld()(和 system())的错位函数调用,错误就消失了。
我 运行 在 Arch Linux 上使用 GCC 4.9.2,我在编译以下代码时遇到了问题:
#ifndef WORLD_H
#define WORLD_H
#include <string.h>
#include <stdio.h>
//#include "removeBuffering.h"
//World dimensions
#define WORLD_WIDTH 80
#define WORLD_HEIGHT 20
//World block types
#define FLAT_LAND '-'
//Instructions
#define MOVE_UP 'w'
#define MOVE_DOWN 's'
#define MOVE_RIGHT 'd'
#define MOVE_LEFT 'a'
#ifndef WIN32
#define COMMAND "clear" //Clears a linux console screen
#else
#define COMMAND "cls" //Clears a windows console screen
#endif
#define wipe() system( COMMAND )
它在我的 koding.com VM 上工作,它使用 GCC 4.8.2 但在我的本地机器上,它生成以下错误:
include/world.h:17:17: error: expected declaration specifiers or ‘...’ before string constant
#define COMMAND "clear" //Clears a linux console screen
我认为这是由于 GCC 4.9 中的某种更改所致,但我似乎找不到任何关于它的有用信息,因此非常感谢任何帮助
运行 通过 gcc -E
-- 这将扩展结果,此时一切都应该变得清晰。
在给出我自己的答案之前,我想向您简要介绍一下我的代码在生成上述错误消息时的外观。这里是 world.h:
#ifndef WORLD_H
#define WORLD_H
#include <string.h>
#include <stdio.h>
//#include "removeBuffering.h"
//World dimensions
#define WORLD_WIDTH 80
#define WORLD_HEIGHT 20
//World block types
#define FLAT_LAND '-'
//Instructions
#define MOVE_UP 'w'
#define MOVE_DOWN 's'
#define MOVE_RIGHT 'd'
#define MOVE_LEFT 'a'
#ifndef WIN32
#define COMMAND "clear" //Clears a linux console screen
#else
#define COMMAND "cls" //Clears a windows console screen
#endif
int cursorXPos;
int cursorYPos;
char world[WORLD_HEIGHT][WORLD_WIDTH+1]; //Space for null terminator
void initializeWorld();
void printWorld();
void getInput();
//void printHelp();
#endif
这里是world.c(为了保存space我清空了函数)
#include "world.h"
void initializeWorld()
{
}
void printWorld()
{
}
void getInput()
{
}
system(COMMAND);
printWorld();
这里是 GCC 提供的完整错误列表:
In file included from src/world.c:1:0:
include/world.h:17:17: error: expected declaration specifiers or ‘...’ before string constant
#define COMMAND "clear" //Clears a linux console screen
^
src/world.c:78:10: note: in expansion of macro ‘COMMAND’
system(COMMAND);
^
src/world.c:79:3: warning: data definition has no type or storage class
printWorld();
^
src/world.c:79:3: error: conflicting types for ‘printWorld’
src/world.c:13:6: note: previous definition of ‘printWorld’ was here
void printWorld()
根据我的经验,处理列表中的第一个错误总是一个好主意,所以除了第一个错误之外我没有太注意任何其他事情,这就是为什么我在第一名。我最终尝试按照 Carey Gregory 和 immibis 的建议解决后来的错误。
重要的是:
src/world.c:79:3: warning: data definition has no type or storage class
printWorld();
^
src/world.c:79:3: error: conflicting types for ‘printWorld’
src/world.c:13:6: note: previous definition of ‘printWorld’ was here
void printWorld()
一旦我移动了对 printWorld()(和 system())的错位函数调用,错误就消失了。