c语言错误 expected identifier or '(' before 'else‘
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言错误 expected identifier or '(' before 'else‘相关的知识,希望对你有一定的参考价值。
#include<unistd.h>
#include<sys/wait.h>
#include<stdio.h>
#include<stdlib.h>
int main()
pid_t pid;
int result;
pid=fork();
if(pid<0)
printf("fork error");
else if(pid == 0)
printf("new program.\n");
excel("/root/fork.out","fork.out",0);
exit(0);
else
int e=waitpid(pid,&result,0);
printf("Child process PID:%d.\n",e);
exit(0);
22.c:16:2: 错误:expected identifier or ‘(’ before ‘else’
22.c:22:1: 错误:expected identifier or ‘(’ before ‘’ token
修改后为:
if(pid<0)
printf("fork error");
else if(pid == 0) //这里少了一个 “”吧
printf("new program.\n");
excel("/root/fork.out","fork.out",0);
exit(0);
else
int e=waitpid(pid,&result,0);
printf("Child process PID:%d.\n",e);
exit(0);
参考技术A else if(pid==0)的后面加一个左大括号
括号要成对出现的。。追问
修改之后又出现 undefined reference to `excel'
追答没有这个函数,不知你调用的这个函数的功能是什么?
追问谢谢了,excle拼写错误了
追答嗯,不客气,下次写代码认真一下
参考技术B if(pid<0)printf("fork error");
else if(pid == 0) //这里少了一个 “”吧
printf("new program.\n");
excel("/root/fork.out","fork.out",0);
exit(0);
else
int e=waitpid(pid,&result,0);
printf("Child process PID:%d.\n",e);
exit(0);
追问
修改之后又出现 undefined reference to `excel'
追答excel函数是不是可以使用?
unistd.h是window下的头文件吗?
C语言出现expected identifier or '('是啥意思?
我这段程序是这样:
void fr_reduce(struct frac *a)
int g = gcd((*a).num, (*a).denom);
(*a).num = ((*a).num / g);
(*a).denom = ((*a).denom / g);
if((*a).denom < 0)
(*a).denom = -(*a).denom;
Error Message:
Compilation failed with errors:
q2/frac.c:32:1: expected identifier or '('
并且if下面被标红了,请问这要怎么修改呀?
C语言出现expected identifier or '('是出现了编写错误,Error Message:Compilation failed with errors:q2/frac.c:32:1: expected identifier or '('
在这段程序中:void fr_reduce(struct frac *a) int g = gcd((*a).num, (*a).denom);(*a).num = ((*a).num / g);(*a).denom = ((*a).denom / g);if((*a).denom < 0)(*a).denom = -(*a).denom;
问题出在:int s;s=a+b;return(s);前面缺了函数首部,应为:int sum(int a,int b)int s;s=a+b;return(s);
扩展资料:
C语言是一门通用计算机编程语言,广泛应用于底层开发。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。
C语言一共只有32个关键字,9种控制语句,程序书写形式自由,区分大小写。把高级语言的基本结构和语句与低级语言的实用性结合起来。C 语言可以像汇编语言一样对位、字节和地址进行操作,而这三者是计算机最基本的工作单元。
尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。
参考资料:百度百科-c语言
参考技术A
1、 在函数 ‘transform’ 中:7: 错误:expected ‘;’ before ‘’ token解释:‘’之前的某个语句缺少分号‘;’;
2、 在函数 ‘Insert_SqList’ 中:6: 错误:‘listsize’ 未声明 (在此函数内第一次使用)
解释:‘listsize’这个变量未声明;
3、 在函数 ‘Hanoi’ 中:9: 错误:提供给函数 ‘Hanoi’ 的实参太少
解释:使用‘Hanoi’函数时,输入的实参不足;
4、 在函数 ‘max’ 中:3: 错误:‘a’ 被重新声明为不同意义的符号
解释:在函数‘max’中,变量名a被重新声明为不同的变量类型;
5、 在函数 ‘EvaluateExpression’ 中:7: 错误:程序中有游离的 ‘#’
解释:在函数‘EvaluateExpression’中,有不可识别的ASCII字符。一般这种情况是由于将代码复制进代码区时,有一些编译器不能识别的字符也被复制进去,导致的编译错误;
6、 在函数 ‘encode’ 中:6: 错误:被调用的对象 ‘code’ 不是一个函数
解释:在函数‘encode’中,调用‘code’时发现,code并未声明为一个函数;
7、 在函数 ‘prime’ 中:6: 错误:在 C99 模式之外使用 ‘for’ 循环初始化声明
解释:在函数‘prime’中,调用for循环的格式不符合C99规范。一般这类问题的错误格式为for(int i=0;i<...),由于C语言是要求你必须将变量在函数开始处进行声明,不支持在任意地方声明变量,所以正确的格式应该是int i;...; for(i=0; i<...);
8、 21: 错误:expected identifier or ‘(’ before ‘’ token
解释:在‘’之前缺少一个标识符或‘(’;
9、 在函数 ‘CreatLink_L’ 中:14: 错误:赋值时类型不兼容
解释:在CreatLink_L函数中,在赋值的过程中等号两侧的数据类型不兼容;
10、段错误
解释:一般来说,段错误就是指访问的内存超出了系统所给这个程序的内存空间,通常这个指是由gdtr来保持的,他是一个48位的寄存器,其中32位是保存由它指向的gdt表,后13位保持对英语gdt的下表,最后3位包括了程序是否在内存中以及程序的在cpu中运行的级别,指向的gdt是由以64位为一个单位的表,在这张表中就保存着程序运行的代码段以及数据段的起始地址以及与此相应的段限和页面交换还有程序运行级别还有内存粒度等等的信息。一旦一个程序发生了越界访问,cpu就会产生相应的异常保护,于是segmentation fault(段错误)就出现了。出现段错误比较常见的情况是访问不安全的指针对象,即指针所指的值并非预期的值时,对指针所指向的对象进行操作。引发段错误后,程序执行终止,之后的代码将不再执行;
11、在函数 ‘ListInsert_Sq’ 中:12: 错误:‘SqList’ 没有名为 ‘Length’ 的成员
解释:在函数‘ListInsert_Sq’中,访问的结构体‘SqList’并没有‘Length’这个成员;
12、在函数 ‘ReverseList_Sq’ 中:11: 错误:数组下标不是一个整数
解释:在函数‘ReverseList_Sq’中,访问数组成员时使用的下标不是整数。数组中标识每个元素都有一个整形下标,实际操作中是在数组基址的基础上加上这个整形下标得出存储对应数组元素地址,然后访问这个地址存储的数据;
13、在函数 ‘dec_to_oct’ 中:10: 错误:实参 1(属于 ‘Push_Sq’)类型不兼容
解释:在函数‘dec_to_oct’中,调用函数Push_Sq时,输入的第一个实参类型与函数指定的第一个实参类型不兼容;
14、在函数 ‘GetTop’ 中:7: 错误:在非结构或联合中请求成员 ‘top’
解释:在函数‘GetTop’中,在访问结构体或联合体内的成员变量‘top’时,发现访问的变量类型并非是一个结构体或联合体;
15、在函数 ‘score’ 中:5: 错误:case 标号不能还原为一个整常量
解释:在函数‘score’中,case标号后跟着的表达式的值并非一个常量值。C语言对于switch语句的语法规定,要求switch后面的括号内为一个表达式。其值应与某一个case后面的常量表达式的值相对应,然后就执行此case后面的语句。这就意味着在case语句之后必须是一个整形常量,并且在C编译器中要求这个常量表达式的值还必须是一个整形值;
16、5:23: 警告:多字节字符常量 在函数 ‘transform’ 中:
解释:对字符变量赋值应对应一个字符常量,如char c = 'c'。如果将多个字符常量赋给一个字符变量时,如char c = 'abc',就引发多字节字符常量警告;
17、在函数 ‘transform’ 中:3: 警告:隐式声明与内建函数 ‘strlen’ 不兼容
解释:在程序中使用字符串函数strlen时未include<string.h>。我们的系统希望用户能自行实现一些功能代码,而不是调用库函数。必须要使用库函数的地方,我们会在调用后程序时导入include语句;
18、6: 错误:‘prime’ 重定义3: 错误:‘prime’ 的上一个定义在此
解释:prime函数重定义;
19、在函数 ‘leap_year’ 中:3: 错误:赋值运算中的左值无效
解释:赋值操作符‘=’的左端的值为左值(l_value),对应右侧的值为右值(r_value)。左值的要求是可寻址的(l的意思为can be though of as location,而不是left),一般是变量。右值的要求是可读的(r的意思为can be though of as "read" value,而不是right),可以是变量和常量;
20、在函数 ‘IntersectList_Sq’ 中:18: 错误:双目运算符 * 操作数无效
解释:双目运算符‘*’的操作数不满足运算符的要求,或者说两个操作数不能发生指定的双目运算; 参考技术B
int s;
s=a+b;
return(s);
前面缺了函数首部。
应为:
int sum(int a,int b)
int s;
s=a+b;
return(s);
C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。 参考技术C 画红色曲线的地方是不是用了全角的空格?是的话换成半角的就行了追问
试过了好像不是空格的问题。
追答q2/frac.c:32:1
关于这句就是说q2/frac.c这个路径的文件第三十二行第一列出现错误。
如果不是空格问题请检查上下文的括号有没有成对。可能是多了一个")"吧。
你给出的代码段语法没有问题
把空格删了还是不行呢。
以上是关于c语言错误 expected identifier or '(' before 'else‘的主要内容,如果未能解决你的问题,请参考以下文章
expected identifier before numeric constant
Object_C 定义全局宏的颜色时,报“Expected identifier”的错误
nuxt vuetify 给出 SassError: Expected identifier
C语言错误:error: expected ':', ',', ';', '' or '__attribute__' b