我用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?知道这一点将使我在我的问题中更加具体。
由于
答案 0 :(得分:3)
如果要编译纯C,则必须在函数的初始化时声明变量。我之所以提到这一点,是因为大多数人使用C ++编译器编译他们的C程序,这些编译器提供了纯C编译器通常无法获得的一些资源,最常见的例子是//注释行。
答案 1 :(得分:2)
如果您想确保您的代码是可移植的,请始终使用-pedantic或-pedantic-errors。
如果您的代码偏离了标准合规性,这将提供警告/错误。
我们谈论这个话题。您可能还应该打开所有警告。编译器警告你的原因很充分;将代码从一个平台移动到另一个平台时,这些警告是潜在错误的根源,因为新的硬件/操作系统/编译器可能与您当前的操作不同。
同样使用正确的GCC前端可执行文件:g ++会将* .c文件视为C ++文件,除非您明确告诉它。所以,如果你正在编译真正的C,那么使用gcc而不是g ++。
gcc -pedantic -Wall -Werror * .c
g ++ -pedantic -Wall -Werror * .cpp
为了帮助解决您的具体问题,可能会看到第43行。虽然错误说明了第44行但很多问题都是由于行程有问题并且解析器未检测到问题直到您到达下一行的第一个词位。
答案 2 :(得分:1)
你是如何复制文件的?是否有可能插入不应该存在的东西?
BTW:请修改您在代码中使用代码标签的情况 - 如果不在我的浏览器中使用“查看源代码”,目前几乎无法阅读。
至于你的结束问题:
uname -a
gcc -v
答案 3 :(得分:1)
当尝试编写可移植代码时,以下编译器标志将告诉您之前的许多问题,直到尝试在下一个平台上编译代码:
-std=c89 -pedantic -Wall
如果您只需要在其他平台上定位GCC,而不是任何其他编译器,那么您可以尝试:
-std=gnu89 -pedantic -Wall
但是我猜这可能允许在较旧的GCC上使用GNU扩展,但旧版GCC不支持。我不确定。
请注意,尽管如果-pedantic保证警告所有非标准程序会很好,但事实并非如此。还有一些它错过了。
答案 4 :(得分:1)
你必须为我们提供更多的错误上下文...至少有一行,可能是第44行和第54行之前的几行。猜测一下,如果你从行前的函数定义开始给我们代码44(也许是第40行左右)到第54行(或者几行之后 - 可能是第60行 - 然后我们可以提供帮助。第44行之前的某些信息会导致它产生除了'之外的其他信息'第44行的char';第54行的同上(可能是同一个问题)。
答案 5 :(得分:1)
信息不足。上面的代码至少是有趣的,有人必须这样做 知道是否谈论ANSI C89或ANSI C99。从广义上讲,第一个答案是错误的。
此致 弗里德里希
答案 6 :(得分:1)
史蒂夫,
第一条错误消息显示“parse error
before
'char'
”。 在 char之前的代码是什么?这是函数声明吗?它是否包含任何用户定义的类型或任何类型的东西?
此错误的最可能的来源是上面第44行使用在头文件中声明的类型或宏...该头文件可能在您自己的Ubuntu系统和一个你想要编译的。
答案 7 :(得分:0)
它是什么UNIX? AIX,Ultrix,Minix,Xenix?
GCC有一个“--version”标志:
gcc --version
答案 8 :(得分:0)
显示GCC版本:
gcc --version
显示函数可能会有所帮助,因此我们可以看到周围的代码。这通常是“先解析错误”类型错误的问题。