Chama as funções do programa C no terminal [closed]

1

Isso está me deixando absolutamente louco porque é uma coisa tão simples de fazer, mas parece que não consigo entender.

Digamos que eu tenha um programa chamado test.c cujo conteúdo é o seguinte.

#include <stdio.h>

main() {
    int bool_or(int x, int y) {
        int result = x|y;
        //return result;
        printf("%d\n", result);
}

int bool_xor(int x, int y) {
    int result= x^y;
        //return result;
        printf("%d\n", result);
}
}

Agora digamos que eu queira fazer uma chamada de função para uma dessas funções do terminal. Como faço isso? Eu compilei o programa e posso comentar manualmente as definições de função e inserir valores específicos no editor e obter algo para exibir, mas e se eu quiser simplesmente escrever algo como bool_xor (3, 5) na linha de comando, como eu faria se eu estivesse executando uma linguagem como o Python.

Basicamente, o que estou perguntando é como faço uma chamada de função. Obrigado!

    
por Leo P 31.12.2014 / 07:54

1 resposta

4

Desculpe, mas você precisa ler a sintaxe C. Houve dois grandes problemas:

  • Definir funções dentro de main não é possível no padrão C e, mesmo na extensão do GCC, certamente não funciona como você pensa.
  • Chamar uma função não acontece por mágica, você deve dizer o que usar como parâmetros e como reformulá-los para uma forma adequada.

Eu tenho trabalhado novamente seu código para um estado de trabalho (em um arquivo chamado bool_xor.c ):

#include <stdio.h>
#include <stdlib.h>

int bool_xor(int x, int y) {
    int result= x^y;
    printf("%d\n", result);
    return 0;
}

int main(int argc, char **argv) {
    if (argc<3) {
        printf("Too few args.\n");
        exit(1);
    }

    return bool_xor( atoi(argv[1]), atoi(argv[2]) );
}

E agora compile e alguns testes simples:

$ gcc -Wall --pedantic -o bool_xor bool_xor.c 

$ ./bool_xor 1 2
3

$ ./bool_xor 7 5
2

Para criar uma função or separada, você precisará reengenhariar o main() para decidir qual função está chamando ou apenas ter outro arquivo bool_or.c e gerar um binário separado que faça esse único trabalho (como este faz).

Veja um exemplo de compare.c combinada que recebe um argumento xor ou or antes dos valores para determinar qual função interna executar.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int bool_or(int x, int y) {
    printf("%d\n", x|y);
    return 0;
}

int bool_xor(int x, int y) {
    printf("%d\n", x^y);
    return 0;
}

int main(int argc, char **argv) {
    if (argc!=4) {
        printf("Needs 3 parameters. Expects:\n\t%s xor|or value value\n", argv[0]);
        exit(1);
    }

    /* TODO check that arguments are valid */

    if (strcmp(argv[1], "xor") == 0)
        return bool_xor( atoi(argv[2]), atoi(argv[3]) );
    return bool_or( atoi(argv[2]), atoi(argv[3]) );
}
    
por Hannu 31.12.2014 / 09:15