【发布时间】:2015-02-14 01:17:56
【问题描述】:
我在带有 GCC 4.9.2 的 Arch Linux 上运行,我在编译以下代码时遇到了问题:
#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 虚拟机,它使用 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 中的某种变化,但我似乎找不到任何关于它的好信息,因此非常感谢任何帮助
【问题讨论】:
-
在第一个
#define之前显示代码。#if或#ifdef块中有什么? -
错误信息是否有更多行?也许一个显示它是从哪里包含的?
-
坦率地说,
#define wipe() system(COMMAND)是一种糟糕的做法。您所做的只是将一个众所周知的功能隐藏在一个新名称后面。它只是混淆了未来程序员的代码,特别是因为你没有明确wipe是使用大写的宏。 -
@CareyGregory 你说的完全正确,所以我删除了违规行。
-
@immibis 原来问题出在 world.c 文件中,其中包含了 world.h 文件。我一直在删除一些while循环并留在一些'}'中。这使得底部的一些函数调用成为孤立的,这似乎导致了这个奇怪的错误。
标签: c gcc c-preprocessor