gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 15:06:26 27 4
gpt4 key购买 nike

程序调整文本字符串。这是我的代码(主要是 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" ?>

我找不到错误,我已经盯着它看了几个小时了。请我真的很感激我能得到的任何帮助。

最佳答案

您正在尝试编译 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... 进行编译启用所有警告并修复发出的任何编译器警告,因为它们可能意味着错误。

关于c - 在GCC中编译C文件时出错(多个文件合而为一),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39009571/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com