我被困在这些线上一个小时。有人可以帮我查一下代码吗?
#include <stdio.h>
#define NUM 20;
int main(void)
{
int fckingshit[NUM],i;
printf("Enter 20 integers now: ");
for(i=0;i<NUM;i++)
scanf("%d",&fckingshit[i]);
return 0;
}
我收到了以下错误消息。
test.c: In function 'main':
test.c:5: error: expected ']' before ';' token
test.c:7: error: 'i' undeclared (first use in this function)
test.c:7: error: (Each undeclared identifier is reported only once
test.c:7: error: for each function it appears in.)
test.c:7: error: expected expression before ';' token
test.c:8: error: 'fckingshit' undeclared (first use in this function)
答案 0 :(得分:1)
#define NUM 20;
错了。它应该是
#define NUM 20
答案 1 :(得分:1)
问题是宏中的;
#include <stdio.h>
#define NUM 20
int main(void)
{
int fckingshit[NUM];
int i;
printf("Enter 20 integers now: ");
for(i=0;i<NUM;i++)
scanf("%d",&fckingshit[i]);
return 0;
}
答案 2 :(得分:1)
#define
在定义后不需要分号,因为它们不是每个说明的说明。相反,预处理器每次在代码中遇到它时都会替换#define
的主体。在您预处理代码后的情况下,它会将#define
扩展为int fckingshit[20;],i;
,因此编译器会生成错误。
与for
语句相同,它被翻译为for(i=0;i<20;;i++)
,这显然是不正确的(分号太多了:)
答案 3 :(得分:1)
正如所有答案所说,错误是宏定义中的分号。
#define NUM 20;
应该是:
#define NUM 20
#define
指令是一组名为Preprocessor Directives的指令的一部分。此指令的其他示例包括#include
和#ifdef
等。在编译器将源代码转换为二进制文件之前,预处理器会解释这些指令。 #define
就像一个超级强大的“查找和替换”,所以当预处理器处理你的例子时它看起来像这样:
#define NUM 20;
...
int fckingshit[20;];
...
实际上,预处理器会为您生成以下内容:
...
# 493 "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/include/stdio.h" 2 3 4
# 2 "test.c" 2
int main(void)
{
int fckingshit[20;],i;
printf("Enter 20 integers now: ");
for(i=0;i<20;;i++)
scanf("%d",&fckingshit[i]);
return 0;
}
它要长得多,但我修剪了前200行。当您看到#define NUM 20;
消失且您的数组声明现在为fckingshit[20;]
时会导致问题。此外,预处理器将#include <stdio.h>
扩展为文件的完整路径(以及我修剪的其他200行)。您可以使用以下命令进行尝试:gcc -E [name of your .c file]
建议:不要将愤怒投射到代码中。我有时会发现自己讨厌我正在编写的代码,但是像void i_hate_you(int die, char idiot){...
这样的名称并没有帮助你解决问题。事实上,情况正好相反。
答案 4 :(得分:0)
除去;在#define NUM 20之后;
它应该是#define NUM 20
答案 5 :(得分:-1)
#define
没有&#34;;&#34;,这应该可以解决您的问题