2013-09-01 2 views
0

Я пишу программу в c, чтобы идентифицировать подпись и копию функции в другом файле.определить подпись функции

Идея заключалась в том, чтобы определить скобки в любой строке и скопировать эту строку в файл. Впоследствии мы можем проверить тип и параметры возврата, чтобы дифференцировать конструкции, если, в то время как из пользовательских функций, кроме main.

Но мой код застрял в бесконечном цикле. Не удается найти проблему.

find_sig.c

#include <stdio.h> 
int main() 
{ 
int count=0; 
char c; 
FILE *f1,*f2; 
f1=fopen("input.c","r"); 
f2=fopen("output.c","w"); 
while((c=getc(f1))!=EOF) 
{ 
    do 
    { 
     if(c=='(') 
     { 
      fseek(f1,-count,1); 
      do{ 
       putc(c,f2); 

      }while((c=getc(f1))!=')'); 
      count=0; 
     } 
     else 
      count++; 

    }while((c=getc(f1))!=10); 
    count=0; 
} 
fclose(f1); 
fclose(f2); 
return 0; 
} 

input.c

#include<stdio.h> 
void fun(); 
int main() 
{ 
    fun(); 
    return 0; 
} 

void fun() 
{ 
    printf("hello"); 
} 

Любая другая идея для определения подписи функций будет очень полезно.

+1

Вам необходимо будет правильно разобрать C. Это не тривиально. Может быть, посмотрите на libclang? –

+0

@ H2CO3 что такое libclang – sandy

+4

Что такое Google? См. Первый матч для «libclang». –

ответ

0

Я понял.

#include<stdio.h> 
#include<string.h> 

char str1[50]; 
int count=0,i=0; 
int main() 
{ 
char c; 
FILE *f1,*f2; 
f1=fopen("input.c","r"); 
f2=fopen("output.c","w"); 

while((c=getc(f1))!=EOF) 
{ 
    if(c!=10)         //checks for /n 
    { 
     if(c=='(') 
     { 
      ++count; 
      fseek(f1,-count,1);    //moves f1 to 'count' bytes back i.e. beginning of line 
      i=0; 
      while((c=getc(f1))!=';'&&c!='{') //checks for declaration or definition 
      { 
       str1[i++]=c; 
      } 

      if(strstr(str1,"main(")!=NULL) //checks whether str1 contains main 
       return 0; 
      else 
       { 
       fprintf(f2,"%s",str1); // copies str1 in f2 
       count=0; 
       } 
     } 
     else 
     count++; 
    } 

    else 
     count=0; 
    if(c==10) 
     putc(c,f2); 

} 

fclose(f1); 
fclose(f2); 
return 0; 
} 
Смежные вопросы