在“*”标记之前仍然是“错误:预期’=’,’,’,’;’,’asm’或’__attribute__’”

这是一个说明问题的小型纯C程序。 该计划没有做任何事情; 它是一个展示同样问题的大型程序的精简版本。

这是场景:

Mac OS X Lion;

gcc版本i686-apple-darwin11-llvm-gcc-4.2(GCC)4.2.1(基于Apple Inc. build 5658)(LLVM build 2335.15.00);

示例代码:

#include  #include  char huge *pbA; char huge *pbB; int main(int argc,char *argv[]) { pbA = (char huge *)farmalloc(2); pbB = pbA; *(pbB++) = 'A'; return( 0 ); } 

编译命令:

 gcc -c -Wall -O -g -pipe -D_SDL myTest.c 

错误消息:

 myTest.c:4: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token myTest.c:5: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token myTest.c: In function 'main': myTest.c:10: error: 'pbA' undeclared (first use in this function) myTest.c:10: error: (Each undeclared identifier is reported only once myTest.c:10: error: for each function it appears in.) myTest.c:10: error: expected ')' before 'huge' myTest.c:10: warning: implicit declaration of function 'farmalloc' myTest.c:11: error: 'pbB' undeclared (first use in this function) 

那么,我错过了什么?

我不确定是什么/哪里是huge的,但是编译器无法在你给它的内容中找到它(即你可能错过了一个标题)。 至于farmalloc ,它看起来在 。 现在关于使用这些,在另一个网站上有一个huge的答案:

 Keywords like near/far/huge were once used as memory models in the old MSDOS days when computers had a max of 640K memory. Any machine built in the last 15 years does not have that restriction so unless you have a real issue where you have to use really obsolete hardware, I would not spend time with segmented memory model syntax. 

huge ,也可能是farmalloc ,似乎被今天的标准所弃用(就像远与近指针一样)。 只需使用char *malloc可以了; 没有奇怪的旧标题。