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]) );
}