免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3071 | 回复: 6
打印 上一主题 下一主题

[C] 请教一个 C 语言的错误,关于 expected 什么 before 什么的 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-05-21 21:04 |只看该作者 |倒序浏览
本帖最后由 jinyuliang 于 2010-05-21 22:06 编辑

纯学习目的,我给 Apache 注册了一个新的信号,现在在编写信号处理程序,编译时出现这样的错误:

  1. gcc -c  -I../os/unix -I../include   -DLINUX=2 -DUSE_HSREGEX `../apaci` http_main.c
  2. In file included from http_main.c:129:
  3. ../include/http_online_modification.h:57: 错误:expected ‘;’, ‘,’ or ‘)’ before ‘.’ token
  4. make[3]: *** [http_main.o] 错误 1
  5. make[2]: *** [subdirs] 错误 1
  6. make[2]: Leaving directory `/home/yuliang/atest/src'
  7. make[1]: *** [build-std] 错误 2
  8. make[1]: Leaving directory `/home/yuliang/atest'
  9. make: *** [build] 错误 2
复制代码


../include/http_online_modification.h:57: 错误:expected ‘;’, ‘,’ or ‘)’ before ‘.’ token

这个头文件里面有下面内容:
  1. typedef struct {
  2.       ……
  3. } OM_option;

  4. ……

  5. static void OM_signal_handler(int signo, siginfo_t *sig_info, void *unused);

  6. ……     

  7. void OM_generate_option_from_sigint(OM_option *option, int si_int);
复制代码


OM_signal_handler() 会创建一个 OM_option 类型的结构体,然后会调用 OM_generate_option_from_sigint() 并且把该结构体指针传递给这个函数,可是编译时走到头文件就出错了,而且是让我很茫然的 before 什么 "." 号,不知道遇到这种错误应该往那个方向去找原因,希望 CU 里牛 X 的各位大哥大姐指点……

============UPDATE=============

问题解决:
感谢 lenovo 的指点,通过命令 gcc -E http_online_modification.h 预处理之后,发现 si_int 是已经定义了的,而不是我希望的自己的变量

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
2 [报告]
发表于 2010-05-21 21:15 |只看该作者
没有http_online_modification.h的内容,
啥建议也没有。

论坛徽章:
0
3 [报告]
发表于 2010-05-21 21:22 |只看该作者
本帖最后由 jinyuliang 于 2010-05-21 21:27 编辑
没有http_online_modification.h的内容,
啥建议也没有。
lenovo 发表于 2010-05-21 21:15



    哦,好的,谢谢关注哈。下面是这个文件,也不很大,上面是我怕占太多篇幅:
  1. /*!                                    
  2. * File name: http_online_modification.h
  3. * Author: Yuliang
  4. */

  5. #include "httpd.h"                                                
  6. #include "http_main.h"                                             
  7. #include "http_log.h"                                             
  8. #include "http_config.h"                                          
  9. #include "http_conf_globals.h"                                    
  10.                                                                   
  11. #include "scoreboard.h"                                            
  12.                                                                   
  13. #include <sys/stat.h>                                             
  14. #include <sys/types.h>                                             
  15. #include <sys/ipc.h>                                               
  16. #include <sys/shm.h>                                               
  17.                                                                   
  18. #include <stdio.h>                                                
  19. #include <stdlib.h>                                                
  20. #include <string.h>                                                
  21. #include <unistd.h>                                                
  22. #include <signal.h>                                                
  23.                                                                   
  24. #define OM_SIG SIGUSR2                                             
  25.                                                                   
  26. #define OM_OPT_PLUS 0                                             
  27. #define OM_OPT_MINUS 1                                             
  28. #define OM_OPT_SET 2                                               
  29.                                                                   
  30. #define OM_OPT_MC 0                                                
  31. #define OM_OPT_MRPC 1                                             
  32. #define OM_OPT_MKAR 2                                             
  33. #define OM_OPT_KAT 3                                               
  34.                                                                   
  35. #define OM_MC "MaxClients"                                         
  36. #define OM_MRPC "MaxRequestsPerChild"                              
  37. #define OM_MKAR "MaxKeepAliveRequests"                             
  38. #define OM_KAT "KeepAliveTimeout"                                 
  39.                                                                   
  40. #define IS_OM 1                                                   
  41. #define OM_GRACEFUL IS_OM                                          
  42.                                                                   
  43. typedef struct {                                                   
  44.     int what;                                                      
  45.     int action;                                                   
  46.     int number;                                                   
  47. } OM_option;                                                      
  48.                                                                   
  49. void OM_signal_register(void);                                    
  50.                                                                   
  51. static void OM_signal_handler(int signo, siginfo_t *sig_info, void *unused);                                                         
  52.                                                                   
  53. void OM_set_is_OM(int true_or_false);                              
  54. int OM_modify_ap_daemons_limit(int option, int value);            
  55.                                                                   
  56. void OM_generate_option_from_sigint(OM_option *option, int si_int);
复制代码

论坛徽章:
0
4 [报告]
发表于 2010-05-21 21:23 |只看该作者
本帖最后由 jinyuliang 于 2010-05-21 21:28 编辑

这个就是目前全部的内容了,还没有写完,不过添加 57 行:
void OM_generate_option_from_sigint(OM_option *option, int si_int);
之前都是可以编译通过的……

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
5 [报告]
发表于 2010-05-21 21:45 |只看该作者
你用gcc -E http_online_modification.h
然后看看最后一行是什么,自己再想想原因。

论坛徽章:
0
6 [报告]
发表于 2010-05-21 22:00 |只看该作者
你用gcc -E http_online_modification.h
然后看看最后一行是什么,自己再想想原因。
lenovo 发表于 2010-05-21 21:45



    哦,明白了……十分感谢,看来我还是视野太窄 -E 这个选项我就没想过可以用,刚学的时候还寻思预处理这玩意儿有什么用呢……

展开以后发现 si_int 是定义过的,是这么定义的:

#define si_int          _sifields._rt._sigval.sival_int

又学到一个方法,再次感谢联想版主~~

论坛徽章:
0
7 [报告]
发表于 2010-05-21 22:02 |只看该作者
也是因为我懒,也不明白各头文件的作用,因为用到一些 Apache 的全局变量,所以把 http_main.h 里面包含的头文件都拿来放到这里了,所以遇到这么尴尬的问题也不知道……

另外还得到一个教训,自己的变量最好取自己的名字,函数名我都注意了,变量名却疏忽了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP