在GCC中编译C文件时出错(多个文件合二为一)

该程序certificate了一串文本。 这是我的代码(main是justify.c):

justify.c

#include  #include "line.h" #include "word.h" #define MAX_WORD_LEN 20 int main(void) { char word[MAX_WORD_LEN+2]; int word_len; clear_line(); for(;;) { read_word(word, MAX_WORD_LEN+1); word_len = strlen(word); if(word_len ==0) { flush_line(); return 0; } if (word_len >MAX_WORD_LEN) word[MAX_WORD_LEN]='*'; if(word_len + 1 > space_remainding()) { write_line(); clear_line(); } add_word(word); } } 

line.c

 #include  #include  #include "line.h" #define MAX_LINE_LEN 60 char line[MAX_LINE_LEN+1]; int line_len=0; int num_words=0; void clear_line(void) { line[0]='\0'; line_len=0; num_words=0; } void add_word(const char *word) { if(num_words>0) { line[line_len]= ' '; line[line_len+1]= '\0'; line_len++; } strcat(line,word); line_len += strlen(word); num_words++; } int space_remainding(void) { return MAX_LINE_LEN - line_len; } void write_line(void) { int extra_spaces, spaces_to_insert, i,j; extra_spaces= MAX_LINE_LEN - line_len; for(i=0; i< line_len; i++) { if(line[i] != ' ') putchar(line[i]); else { spaces_to_insert = extra_spaces/ (num_words - 1); for(j=1; j 0) puts(line); } 

word.c

 #include  #include "word.h" int read_char(void) { int ch= getchar(); if (ch=='\n' || ch == '\t') return ' '; return ch; } void read_word(char *word, int len) { int ch, pos=0; while((ch=read_char()) == ' ') ; while(ch != ' ' && ch !=EOF) { if (pos<len) word[pos++]=ch; ch= read_char(); } word[pos]= '\0'; } 

line.h

 #ifndef LINE_H #define LINE_H void clear_line(void); void add_word(const char *word); int space_remainding(void); void write_line(void); void flush_line(void); #endif // LINE_H 

word.h

 #ifndef LINE_H #define LINE_H void clear_line(void); void add_word(const char *word); int space_remainding(void); void write_line(void); void flush_line(void); #endif // LINE_H 

当我在代码块中编译它们时,它没有给我任何错误。 但是当我在海湾合作委员会做同样的事情时

gcc -o justify justify.c line.c word.c

我明白了:

 justify.c:1:1: error: expected identifier or '(' before '<' token  

我找不到错误,我几个小时都在盯着这个。 我真的很感激我能得到的任何帮助。

您正在尝试编译Codeblocks项目文件,该文件应在项目目录中称为.chp ,并且是一般forms的XML文件:

     ...   

你的post没有透露你是如何犯这个奇怪的错误。 可能是你通过某种方式将.cbp文件的内容复制到justify.c ,或者将.cbp文件移动到justify.c ,或者更加模糊的东西,打破了项目。

如果放在同一目录中,您发布的五个文件将使用该命令进行编译和链接而不会出现错误(尽管不是没有编译器警告)。

 gcc -o justify justify.c line.c word.c 

在该目录中运行。

只需确保保存源文件和头文件,并保留运行它时所需的内容。 使用Codeblocks之外的其他编辑器预先打开并检查它们。

当然,您应该使用gcc ...-Wall...编译gcc ...-Wall...以启用所有警告并修复发出的任何编译器警告,因为它们可能意味着错误。

尝试用这个编译

gcc -o justify justify.c line.c word.c -I.