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

时间:2016-08-18 03:34:50

标签: c gcc codeblocks

程序证明了一串文字。这是我的代码(main是justify.c):

justify.c

#include <string.h>
#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 <stdio.h>
#include <string.h>
#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<=spaces_to_insert +1; j++)
                putchar(' ');
            extra_spaces -= spaces_to_insert;
            num_words--;
        }
    }

    putchar('\n');
}

void flush_line(void)
{
    if (line_len > 0)
        puts(line);
}

word.c

#include <stdio.h>
#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中做同样的事情时

  
    

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

  

我明白了:

justify.c:1:1: error: expected identifier or '(' before '<' token
<?xml version="1.0" encoding-"UTF-8" standalone="yes" ?>

我找不到错误,我已经盯着这几个小时了。请 我非常感谢能得到的任何帮助。

2 个答案:

答案 0 :(得分:1)

您正在尝试编译Codeblocks项目文件,该文件应该是 在项目目录中调用<project_name>.chp,它是一般形式的XML文件:

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<CodeBlocks_project_file>
    <FileVersion major="1" minor="6" />
    <Project>
    ...
    </Project>
</CodeBlocks_project_file>

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

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

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

在该目录中运行。

只需确保源文件和头文件已保存,并且具有运行它时所需的内容。事先用Codeblocks以外的其他编辑器打开并检查它们。

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

答案 1 :(得分:0)

尝试使用此

进行编译

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