2011-11-15 25 views
1

我創建了2 C程序源代碼文件和一個只包含函數聲明的頭文件。如何使用夾板工具檢查源代碼時包含頭文件?

mypattern.h

#include<stdio.h> 
void pattern_check(char *,int,char *); 

pattern_main.c

#include<mypattern.h> 
int main(int argc,char *argv[]) 
{ 
int i,max,flag=1; 
char *p,*cmd="end"; 
if(argc!=3) 
{ 
    printf("usage : Invalid no of arguments\n"); 
    return 0; 
} 
max=atoi(argv[1]); 
char elements[max][15]; 
printf("\nEnter the %d input strings :\n",max); 
for(i=0;i<max;i++) 
{ 
    p=elements[i]; 
    // printf("%u\n",p); 
    scanf("%s",p); 
// printf("%s-->%u\n",p,p); 
    if(*p==*cmd) 
    { 
    flag=0; 
    max=i; 
    break; 
    } 
} 
if(flag) 
p=p-(sizeof(char)*((max-1)*15)); 
else 
p=p-(sizeof(char)*((max)*15)); 
pattern_check(p,max,argv[2]); 
return 0; 
} 

pattern_search.c

#include<mypattern.h> 
void pattern_check(char *elements,int max,char *pattern) 
{ 
int i,count=0,len=0; 
char *ptr,*ch,*pat[max],*output=NULL; 
// printf("\nPattern : %s\n",pattern); 
for(i=0;i<max;i++) 
{ 
// printf("\nfor loop %d\n",i); 
    ptr=elements+(i*15); 
    //printf("%u-->%s\n",ptr,ptr); 
    ch=strstr(ptr,pattern); 
    if(ch!=NULL) 
    { 
    pat[count]=(char *)malloc(sizeof(char)); 
    if(pat[count]==NULL) 
    { 
    printf("\nMalloc failed\n"); 
    return; 
    } 
    strcpy(pat[count],ptr); 
    // printf("\nCount : %d\n",count); 
    // printf("\n%s-->%u\n",pat[count],pat[count]); 
    count++; 
    } 
} 
printf("Pattern mateched elements :\n"); 
for(i=0;i<count;i++) 
{ printf("\n-->%s\n",pat[i],pat[i]); 
    len+=strlen(pat[i]); 
} 
// printf("\nFinal length : %d\n",len); 
    output=malloc(sizeof(char)*(len+1)); 
    if(NULL==output) 
    { 
    printf("Malloc failed \n"); 
    return; 
    } 
for(i=count-1;i>=0;i--) 
    strncat(output,pat[i],strlen(pat[i])); 
printf("\nFinal concatended string output : %s\n\n",output); 
free(output); 
} 

雖然CHEC王這個代碼在Linux上夾板工具,

splint pattern_main.c 

我收到以下錯誤:

pattern_main.c:1:22: Cannot find include file mypattern.h on search path: 
         /usr/include;/usr/include 
    Preprocessing error. (Use -preproc to inhibit warning) 
Preprocessing error for file: /user/gur29597/mysourcecode/Memory_pgm/pattern_main.c 
*** Cannot continue. 

我怎樣才能使它正確嗎?

回答

1

使用帶雙引號的#include "mypattern.h",而不是使用角度和/或將包含-I參數的包含目錄傳遞給gcc。並且不要忘記使用-Wall標誌來讓GCC獲得所有警告!要了解這頭被包括在內,使用-H或產生與gcc -C -E pattern_main.c

+0

請注意,這是由於另一個問題? 我的代碼旨在交叉編譯,並不構建在我的x86 linux開發框下,但我仍然需要靜態檢查它。 – tutuca

7

預處理的形式,你可以試試或者2個解決方案(巴西萊已經提到,但在迴應中提到,作爲gcc但它保持splint爲):
1.使用#include "mypattern.h"代替#include <mypattern.h>。這將提示splint也檢查當前目錄中的標題。
2.將-I<path_to_header>選項與splint一起使用。一些在這些線路上:
splint pattern_main.c -I./

splint pattern_main.c -I`pwd` 

你可以找到關於他們的手冊中增加頭部包含路徑splint細節。看看下面的第14.3節link
希望這有助於!

相關問題