Erros ao compilar código C

Erros ao compilar código C

Encontrei um pedaço de código C que seria muito útil para o que desejo fazer neste link:Todas as combinações possíveis de caracteres e números

#include <stdio.h>

//global variables and magic numbers are the basis of good programming
const char* charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
char buffer[50];

void permute(int level) {
  const char* charset_ptr = charset;
  if(level == -1){
    puts(buffer);
  }else {
   while(buffer[level]=*charset_ptr++) {
    permute(level - 1);
   }
  }
}

int main(int argc, char **argv)
{

  int length;
  sscanf(argv[1], "%d", &length); 

  //Must provide length (integer < sizeof(buffer)==50) as first arg;
  //It will crash and burn otherwise  

  buffer[length]='\0';
  permute(length - 1);
  return 0;
}

No entanto, quando tento compilá-lo conforme sugerido, recebo os seguintes erros. Alguém pode me ajudar a corrigi-lo?

$ make CFLAGS=-O3 permute && time ./permute 5 >/dev/null
make: Nothing to be done for 'permute'.
./permute: line 3: //global: No such file or directory
./permute: line 4: const: command not found
./permute: line 5: char: command not found
./permute: line 7: syntax error near unexpected token `('
./permute: line 7: `void permute(int level) {'

Além disso, quando tento usar o gcc, recebo um erro de falha de segmentação:

$ mv permute permute.c
$ gcc permute.c -o permute.bin
$ chmod 755 permute.bin 
$ ./permute.bin 
Segmentation fault (core dumped)

Responder1

Parece que você nomeou inicialmente o arquivo C permute; quando makefalhou, você tentou executá-lo com seu shell, o que resultou em todos esses erros de sintaxe (já que o shell não sabe como executar o código C).

No segundo caso, você acertou o comentário:

//Deve fornecer comprimento (inteiro < sizeof(buffer)==50) como primeiro argumento;

//Ele irá travar e queimar caso contrário

porque você não forneceu o primeiro (ou nenhum) argumento ao programa. Tentar ./permute.bin 10.

Responder2

No primeiro caso, parece que você salvou o código C permutee tentou executar

make CFLAGS=-O3 permute && time ./permute 5 >/dev/null

Como não existe Makefileum alvo para make, ele saiu sem erros ao imprimir a mensagem informativa,

Nada a ser feito para 'permutar'.

Como makenão retornou um código de erro, a segunda parte desse comando ( time ./permute 5 >/dev/null) foi executada. Como permuteé um código-fonte e não um binário executável, ele foi interpretado como um script de shell, resultando na seguinte saída:

./permute: line 3: //global: No such file or directory
./permute: line 4: const: command not found
./permute: line 5: char: command not found
./permute: line 7: syntax error near unexpected token `('
./permute: line 7: `void permute(int level) {'

Instruções melhores seriam salvar o código-fonte C permute.ce executar o seguinte comando para compilá-lo (e vincular aos arquivos de biblioteca necessários):

gcc -O3 -o permute permute.c

Isso cria permuteum binário executável que pode ser executado, por exemplo:

./permute 2

informação relacionada