在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项目文件,该文件应在项目目录中称为
,并且是一般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.