我用Ubuntu Linux在C中编写了一个程序,现在我需要将它移植到UNIX机器上(或者我认为是UNIX机器)。它在我的Ubuntu和GCC上编译得很好但是当我尝试在UNIX框上用GCC编译它时,它会出现这个错误:

a.c: In function `goUpDir':
a.c:44: parse error before `char'
a.c:45: `newDir' undeclared (first use in this function)
a.c:45: (Each undeclared identifier is reported only once
a.c:45: for each function it appears in.)
a.c: In function `goIntoDir':
a.c:54: parse error before `char'
a.c:57: `newDir' undeclared (first use in this function)
a.c:57: `oldDir' undeclared (first use in this function)

主要问题似乎是 char 之前的解析错误(其他是相关的)

44  char newDir[50] = ""; 
54  char* oldDir = (char*)get_current_dir_name();

这些只是简单的C风格的字符串声明。是否需要包含头文件以使其在UNIX中运行?

P.S。什么是命令,看看你正在使用的是哪个版本的unix和哪个版本的gcc?知道这一点将使我在我的问题中更加具体。

由于

有帮助吗?

解决方案

如果要编译纯C,则必须在函数的初始化时声明变量。我之所以提到这一点,是因为大多数人使用C ++编译器编译他们的C程序,这些编译器提供了纯C编译器通常无法获得的一些资源,最常见的例子是//注释行。

其他提示

如果您想确保您的代码是可移植的,请始终使用-pedantic或-pedantic-errors。

如果您的代码偏离了标准合规性,这将提供警告/错误。

我们谈论这个话题。您可能还应该打开所有警告。编译器警告你的原因很充分;将代码从一个平台移动到另一个平台时,这些警告是潜在错误的根源,因为新的硬件/操作系统/编译器可能与您当前的操作不同。

同样使用正确的GCC前端可执行文件:g ++会将* .c文件视为C ++文件,除非您明确告诉它。所以,如果你正在编译真正的C,那么使用gcc而不是g ++。

  

gcc -pedantic -Wall -Werror * .c
  g ++ -pedantic -Wall -Werror * .cpp

为了帮助解决您的具体问题,可能会看到第43行。虽然错误说明第44行,但很多问题都是由于行程有问题而且问题未被解析器检测到,直到您到达下一行的第一个词位。

你是如何复制文件的?是否有可能插入不应该存在的东西?

BTW:请修改您在代码中使用代码标签的情况 - 如果不使用“查看源代码”,目前几乎无法阅读在我的浏览器中。

至于你的结束问题:

uname -a
gcc -v

当尝试编写可移植代码时,以下编译器标志将告诉您之前的许多问题,直到尝试在下一个平台上编译代码:

-std=c89 -pedantic -Wall

如果您只需要在其他平台上定位GCC,而不是任何其他编译器,那么您可以尝试:

-std=gnu89 -pedantic -Wall

但是我猜这可能允许在较旧的GCC上使用GNU扩展,但旧版GCC不支持。我不确定。

请注意,尽管如果-pedantic保证警告所有非标准程序会很好,但事实并非如此。还有一些它错过了。

你必须为我们提供更多的错误上下文...至少有一行,可能是第44行和第54行之前的几行。猜测一下,如果你从行前的函数定义开始给我们代码44(也许是第40行左右)到第54行(或者几行之后 - 可能是第60行 - 然后我们可以提供帮助。第44行之前的某些信息会导致它产生除了'之外的其他信息'第44行的char';第54行的同上(可能是同一个问题)。

信息不足。上面的代码至少是有趣的,而且必须要有 知道是否谈论ANSI C89或ANSI C99。从广义上讲,第一个答案是错误的。

此致 弗里德里希

史蒂夫,

第一条错误消息在 'char'"之前显示“ parse error char之前的代码是什么?这是函数声明吗?它是否包含任何用户定义的类型或任何类型的东西?

此错误的最可能的来源是上面第44行使用在头文件中声明的类型或宏...该头文件可能在您自己的Ubuntu系统和一个你想要编译的。

它是什么UNIX? AIX,Ultrix,Minix,Xenix?

GCC有一个“ - 版本”标志:

gcc --version

显示GCC版本:

gcc --version

显示函数可能会有所帮助,因此我们可以看到周围的代码。这通常是“之前解析错误”的问题。类型错误。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top