- 论坛徽章:
- 0
|
正常情况下,我直接gcc source.c,有时遇到for (int i = 0; ) 这样的声明,编译选项就加上-std=c99
经验里加上后成功率总是更高的,可最近发现,加上后反而编译不过了。代码如下:
#include <stdio.h>
#include <string.h>
#include <netinet/ip_icmp.h>
void PackICMP(int id, struct icmp *pack)
{
memset(pack, '\0', sizeof(struct icmp));
pack->icmp_type = ICMP_ECHO;
pack->icmp_code = 0;
pack->icmp_cksum = 0;
pack->icmp_hun.ih_idseq.icd_id = 0;
pack->icmp_hun.ih_idseq.icd_seq = id + 2;
}
int main(void)
{
struct icmp XX;
PackICMP(sizeof(XX), &XX);
return 0;
}
[root@localhost ~]# gcc -v
gcc 版本 4.1.2 20080704 (Red Hat 4.1.2-51)
编译结果为:
[root@localhost ~]# gcc template.c
[root@localhost ~]# gcc template.c -std=c99
template.c:5: 警告:‘struct icmp’ 在形参表内部声明
template.c:5: 警告:它的作用域仅限于此定义或声明,这可能并不是您想要的
template.c: In function ‘PackICMP’:
template.c:7: 错误:‘sizeof’ 不能用于不完全的类型 ‘struct icmp’
template.c:8: 错误:提领指向不完全类型的指针
template.c:9: 错误:提领指向不完全类型的指针
template.c:10: 错误:提领指向不完全类型的指针
template.c:11: 错误:提领指向不完全类型的指针
template.c:12: 错误:提领指向不完全类型的指针
template.c: In function ‘main’:
template.c:17: 错误:‘XX’ 的存储大小未知
是不是netinet/ip_icmp.h里面定义的struct icmp过于复杂,包含struct, union, #define等,-std=c99不能识别其定义? |
|