我正在研究一本书的例子 - CSPP - O'Hallaron&科比
在编译时我得到一个错误 -
gcc -Wall -W -Werror main.c -o endianc
还尝试使用cc main.c
- 同样的错误
aaron@aaron-Box:~/xxx/cpp/endian$ cc main.c
main.c: In function ‘main’:
main.c:6:24: error: storage class specified for parameter ‘byte_pointer’
typedef unsigned char *byte_pointer;
^
main.c:8:17: error: expected declaration specifiers or ‘...’ before ‘byte_pointer’
void show_bytes(byte_pointer start, int len)
^
main.c:17:1: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token
{
^
main.c:22:1: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token
{
^
main.c:27:1: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token
{
^
main.c:6:24: error: declaration for parameter ‘byte_pointer’ but no such parameter
typedef unsigned char *byte_pointer;
^
main.c:29:1: error: expected ‘{’ at end of input
}
实际节目 -
#include <stdio.h>
#include<stdlib.h>
int main(void)
{
typedef unsigned char *byte_pointer;
void show_bytes(byte_pointer start, int len)
{
int i;
for (i = 0; i < len; i++)
printf(" %.2x", start[i]);
printf("\n");
}
void show_int(int x)
{
show_bytes((byte_pointer) &x, sizeof(int));
}
void show_float(float x)
{
show_bytes((byte_pointer) &x, sizeof(float));
}
void show_pointer(void *x)
{
show_bytes((byte_pointer) &x, sizeof(void *));
}
return 0;
}
感谢您的帮助。
答案 0 :(得分:1)
;
之后您缺少分号void main()
。 (此外,您似乎不太可能首先需要该行,但您需要main
函数的实际实现,并且返回类型为int
,而不是{{1} }。)
答案 1 :(得分:0)
在main()处缺少分号,这就是它抛出错误的原因。
答案 2 :(得分:0)
发生错误是因为“void main()”后面紧跟着typedef。缺少主要功能的整个主体。回去看看书,看看你遗漏了什么。
答案 3 :(得分:0)
好的,我现在已经修好了
将int main(void);
替换为int main()
通知NO simicolon - &gt;我在本教程中使用它 - &gt; URL
并将return 0;
替换为return (0);
,注意带括号的括号。
我还注意到“c Programming Language”中的例子D.Richie - &gt;使用main
方法的示例不包含;
1)我可以问一下代码中的这些变化是什么吗?
2)现在我无法运行程序./endianc
- &gt;它没有回应
我也试过
xx@aaron-Box:~/xxx/cpp/endian$ cc main.c
xx@aaron-Box:~/xxx/cpp/endian$ a out
a: command not found
(我是否需要为此问题打开单独的线程?)
感谢所有人的帮助。