Ir ao conteúdo
  • Cadastre-se

Dúvida com include C++


eric123

Posts recomendados

Olá pessoal, estou criando uma TAD e estou querendo incluir um código separado em meu main, só que não sei o que usar para incluir isso dentro de uma estrutura de repetição(por exemplo).

Pois fora do main sei que consigo utilizar "#include<...>", mas já dentro do main não sei, e preciso da ajuda de vocês.

Agradeço desde já (:

abraço.

Link para o comentário
Compartilhar em outros sites

nao entendi muito bem o que tu quis dizer, pelo que entendi tu quer por uma biblioteca feita por você mesmo? no caso aonde você poe os includes é os por

#include "suabiblioteca.h"

dai é só chamar determinada funçao que esteja com o prototipo declarado no seu arquivo.h

Link para o comentário
Compartilhar em outros sites

Também não entendi muito bem... então vou dar dois exemplos '-'.

Exemplo 1

inc.c

	for (i = 0; i < 10; i++)
printf (" %d", i);

main.c

#include <stdio.h>

int main ()
{
int i;
#include "inc.c"
return 0;
}

Ou...

Exemplo 2

inc.c

struct exemplo
{
int primeiro, segundo;
};

main.c

#include <stdio.h>
#include "inc.c"

int main ()
{
int i;
struct exemplo a[10];
for (i = 0; i < 10; i++)
a[i] = (struct exemplo){10+i, 15-i};
for (i = 0; i < 10; i++)
printf ("%d %d\n", a[i].primeiro, a[i].segundo);
return 0;
}

Link para o comentário
Compartilhar em outros sites

Com certeza tem uma outra forma de fazer o q você ta querendo, de uma forma menos bizarra q essa.

Vou explicar, até dá pra você incluir um cabeçalho no meio do código, mas nao dá pra incluir um cabeçalho durante a execução do programa.

você pode usar um #if.


#if x == 0
#include "cabecalho.h"
#endif

Mas você só vai poder fazer isso se você declarar uma constante x com o valor 0, nao da pra fazer isso aqui, por exemplo:


scanf("%d",&x);
#if x == 0
#include "cabecalho.h"
#endif

Link para o comentário
Compartilhar em outros sites

...

Inclui antes da main e chame as funções correspondentes...

#include "funcoes.h"

int main()
{
switch(escolha)
{
case 1:
funcaoA();
break;
case 2:
funcaoB();
break;
case 3:
funcaoC();
}
return 0;
}

...

-

...

Inclui antes da main e chame as funções correspondentes...

#include "funcoes.h"

int main()
{
switch(escolha)
{
case 1:
funcaoA();
break;
case 2:
funcaoB();
break;
case 3:
funcaoC();
}
return 0;
}

...

-

Link para o comentário
Compartilhar em outros sites

@Dead

Na verdade, isso não ajuda em nada no que ele quer (como você disse, tem que ser uma constante, e o programa dele não é assim). Além disso, dá sim para incluir algo durante a execução do programa. Quer dizer, na prática acaba sendo durante o link (quando for compilar)...

@eric

Siga o que Shara postou... é o jeito correto de fazer isso. Ou então simplesmente ponha as funções em cima do main, no mesmo arquivo...

Link para o comentário
Compartilhar em outros sites

@Dead

Na verdade, isso não ajuda em nada no que ele quer (como você disse, tem que ser uma constante, e o programa dele não é assim). Além disso, dá sim para incluir algo durante a execução do programa. Quer dizer, na prática acaba sendo durante o link (quando for compilar)...

Eu sei que não ajudaria em nada, foi por isso q sugeri que ele usase uma outra forma menos bizarra dele fazer o q ele tava tentando fazer.

O que eu quis dizer é que não dá pra incluir um arquivo quando o programa já está compilado e rodando.

Link para o comentário
Compartilhar em outros sites

@Shara

entendi perfeitamente o que você passou, mas na verdade o que eu queria não seria funções .h e sim .c, não sei se faria diferença, mas também tentei com ambas e deu o mesmo erro.

O que eu estou querendo, é fazer uma atividade que o meu professor passou para nós,

que é criar um algoritmo com um menu para escolher trabalhar em ARVORE AVL, ARVORE B ou TABELA HASH. (não sei se conhece os sistemas, mas isso não importa)

O que estou tetando fazer é criar apenas um main para todos, e incluir as funções externas de cada um para o mesmo(main). Assim eu incluiria, no caso, o "main" de cada um (AVL, B e Hash) dentro dos cases do switch do meu main, que dependentemente do valor que entrar no meu switch ele ira entrar num case que terá um outro menu referente ao que o usuário escolheu no primeiro menu do programa.

Entendeu?? rsrs

É o que eu estou fazendo mas parece que esta contendo erros quando ele tenta incluir as funções no main. Da a impressão que os códigos das funções estão errados, mas na verdade não estão, pois consigo executa-los separados.

Estou usando o Dev-C++.

Obrigado.

Link para o comentário
Compartilhar em outros sites

deixa eu ver se eu entendi, você quer criar um arquivo.c para cada menu?

Mais ou menos assim? criar um arquivo C/C++ com a função main:

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

int main()
{
printf("Arquivo principal\n");
_main();
return 0;
}

E outro com com uma função main secundaria:

#include <stdio.h>

int _main()
{
printf("\nArquivo secundario");
return 0;
}

Adicionar o arquivo secundario ao projeto clicando em File>New>File... (No code::blocks)

A função main secundaria roda perfeitamente na função main principal.

É mais ou menos isso?

Tem uma forma menos complicada de fazer isso tudo que é criar um header, escrever as sua funções nele e chamá-las quando precisar, mas pelo visto você não quer usar esse método, não sei porq.

Link para o comentário
Compartilhar em outros sites

voce pode botar essas funções no seu mesmo .c, colocando .h é só pra organizar seu programa, pra deixar as funções separadas e bonitinhas em outro arquivo, pro seu .c não ficar muito grande.

Não sei ao certo qual outra propriedade da main, mas até agora só vi ela como mais uma função, a única propriedade especial dela é que o programa inicia por ela.

Você pode perfeitamente fazer o que Shara disse...dentro dessas funções você roda suas árvores, as frutas, os galhos, faz perguntas, coleta dados...enfim, é como se essas novas funções fossem sua main...seu programa pode somente perguntar pra onde ir, ir pra essa função e ficar o tempo inteiro trabalhando lá, só saindo quando o usuário digitasse algo ou chegasse ao fim mesmo, aí voltaria pra main e terminaria o programa.

Super normal usar a main só pro switch, e depois só voltar pra ela pra terminar o programa.

Ou cria teu programa principal, e os outros 3, cada um com sua main.

Dentro do principal, na switch usa

system("arvore_avl.exe");

que ele vai abrir o outro programa, mas isso não é muito seguro nao...

Link para o comentário
Compartilhar em outros sites

@Dead

Sou leigo em C/C++, o que eu quero fazer é quase isso que você citou, mas no caso nao quero incluir um outro "main(){}" no main principal, somente o menu e as chamadas das funções daquele determinado sistema escolhido.

exemplo::

main.cpp

#include <stdio.h>

#include <stdlib.h>

int main()

{

int escolha;

switch(escolha){

case 1: #include "MenuAVL.c"

}

}

MenuAVL.c

printf("\nFUNÇÕES DA ÁRVORE AVL");

return 0;

}

Seria isso, pois como tenho um main_principal, nao seria necessário levar um outro main para o meu main_principal, só jogar o menu e as chamadas das funções.

Link para o comentário
Compartilhar em outros sites

@Dead

Sou leigo em C/C++, o que eu quero fazer é quase isso que você citou, mas no caso nao quero incluir um outro "main(){}" no main principal, somente o menu e as chamadas das funções daquele determinado sistema escolhido.

exemplo::

main.cpp

MenuAVL.c

Seria isso, pois como tenho um main_principal, nao seria necessário levar um outro main para o meu main_principal, só jogar o menu e as chamadas das funções.

Então cara, primeiramente você vai ter q apagar essa ideia da sua cabeça:

case 1: #include "MenuAVL.c"

Não tem como usar a função #include no meio do código, por mais q o arquivo seja no formato '.c' , '.h', '.cpp' etc... Isso é regra, os caras que criaram C determinaram isso, então desiste de usar #include no case.

O que você pode fazer é exatamente isso que eu falei, você vai ter q criar um arquivo "MenuAVL.c", nele incluir a função:


void MenuAVL()
{
printf("Menu AVL :D");
return;
}

Adicionar esse arquivo ao projeto para que ele possa ser compilado e linkado junto com todos o arquivo main.

E na função main principal, chamar a função "MenuAVL".


int main()
{
[...]

switch(lol)
{
case 1: MenuAVL();
}
return 0;
}

tendeu?

Link para o comentário
Compartilhar em outros sites

Andei pesquisando aqui sobre linker, pré-processamento, diretivas etc...

O pré-processador substitui tudo que for #include pelo código dentro desse arquivo que você incluiu, é só uma substituição e entrega pro compilador.

Pela que voce ta dizendo, o pré- não saberia ao certo o que substituir, já que isso vai ser decidido somente na execução do programa...talvez, quiçá, quem sabe, por isso não dê pra fazer isso...no fim das contas, o pré- substitui todos esses #includes.

Eu acho.

Link para o comentário
Compartilhar em outros sites

Ave,

Provavelmente o amigo eric123 deve estar habituado com programação CLIPPER. A sintaxe do CA-Clipper permite fazer justamente isso que ele quer (e é até praxe): incluir código-fonte (.PRG's) nas entradas do comando CASE (ou em qualquer parte do código).

@eric123: Procure entender a sintaxe do C e siga as orientações já passadas acima.

;)

NW

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...