Codigo em C em um programa em C++ [RESOLVIDO]

1. Codigo em C em um programa em C++ [RESOLVIDO]

Théo Borém Fabris
TheoFabris

(usa Ubuntu)

Enviado em 23/04/2015 - 19:43h

Bom dia!
Eu queria saber se é possivel adicionar um comando em C em um programa em C++?
Se For possivel dei-me um exemplo de codigo?


  


2. MELHOR RESPOSTA

Thiago Henrique Hüpner
Thihup

(usa Manjaro Linux)

Enviado em 23/04/2015 - 20:04h

TheoFabris escreveu:

Bom dia!
Eu queria saber se é possivel adicionar um comando em C em um programa em C++?
Se For possivel dei-me um exemplo de codigo?


Não entendi muito bem a pergunta, você se refere a usar um comando de C em C++?

Um código escrito em C pode ser muito bem compilado em C++ (salvo exceções)

Mas vamos fazer um teste:



Main.cpp

#include <stdio.h> // O Correto seria incluir a biblioteca <cstdio> pois importa "as coisas" para o namespace std; mais uma prova de que o compilador (G++) consegue "compilar" um arquivo de 'C'

int main(int argc, char **argv){
printf("Olá Mundo, estou em um arquivo de C++ compilado pelo G++ usando a biblioteca de C o.0\n");
return 0;
}


(Compile com : g++ -o Main Main.cpp)

Agora se quiser outros exemplos , posso citar : SDL,GLUT,GTK+ e muitos outros

Vou usar uma frase que eu li a pouco tempo atrás:
De certa maneira, eu acho justo que, ao mostrar exemplos de funções herdadas da biblioteca padrão do C pelo C++, tais exemplos sejam dados com programas que também são válidos em C


Ou seja, (quase) qualquer programa que você fizer em C será valido também em C++

Espero ter ajudado

Qualquer dúvida só postar aqui.

[]'s

T+

EDIT: Segue um exemplo da biblioteca SDL (que foi totalmente escrito em C) rodando em um aplicativo de C++:

#include <iostream>
#include <stdlib.h>
#include <SDL/SDL.h>

using namespace std;

int main ( int argc, char** argv )
{
// initialize SDL video
if ( SDL_Init( SDL_INIT_VIDEO ) < 0 )
{
cout << "Unable to init SDL: " << SDL_GetError() << endl;
return 1;
}

// make sure SDL cleans up before exit
atexit(SDL_Quit);

// create a new window
SDL_Surface* screen = SDL_SetVideoMode(640, 480, 16,
SDL_HWSURFACE|SDL_DOUBLEBUF);
if ( !screen )
{
cout << "Unable to set 640x480 video: " << SDL_GetError() << endl;
return 1;
}

// load an image
SDL_Surface* bmp = SDL_LoadBMP("cb.bmp");
if (!bmp)
{
cout << "Unable to load bitmap:" << SDL_GetError() << endl;
return 1;
}

// centre the bitmap on screen
SDL_Rect dstrect;
dstrect.x = (screen->w - bmp->w) / 2;
dstrect.y = (screen->h - bmp->h) / 2;

// program main loop
bool done = false;
while (!done)
{
// message processing loop
SDL_Event event;
while (SDL_PollEvent(&event))
{
// check for messages
switch (event.type)
{
// exit if the window is closed
case SDL_QUIT:
done = true;
break;

// check for keypresses
case SDL_KEYDOWN:
{
// exit if ESCAPE is pressed
if (event.key.keysym.sym == SDLK_ESCAPE)
done = true;
break;
}
} // end switch
} // end of message processing

// DRAWING STARTS HERE

// clear screen
SDL_FillRect(screen, 0, SDL_MapRGB(screen->format, 0, 0, 0));

// draw bitmap
SDL_BlitSurface(bmp, 0, screen, &dstrect);

// DRAWING ENDS HERE

// finally, update the screen :)
SDL_Flip(screen);
} // end main loop

// free loaded bitmap
SDL_FreeSurface(bmp);

// all is well ;)
printf("Exited cleanly\n");
return 0;
}



[!] Para executar é necessário possuir instalado a Biblioteca SDL e qualquer imagem com o nome de "cb.bmp".

3. Re: Codigo em C em um programa em C++ [RESOLVIDO]

Paulo
paulo1205

(usa Ubuntu)

Enviado em 23/04/2015 - 23:58h

Se você tiver feito sua pergunta a sério, e quiser realmente aprender a respeito, eu recomendo os seguintes artigos:

    - “Sybling Rivalry: C and C++” (algo como “Rivalidade entre Irmãos: C e C++”), em http://www.stroustrup.com/sibling_rivalry.pdf, escrito pelo próprio Bjarne Stroustrup (o criador do C++).

    - “C and C++: Siblings” (“C e C++: Irmãos”), em http://www.stroustrup.com/siblings_short.pdf, escrito pelo mesmo autor, é uma espécie de resumo do artigo indicado acima, com algumas atualizações.

    - “Incompatibilities between ISO C and ISO C++” (“Incompatibilidades entre C ISO e C++ ISO”), em http://david.tribble.com/text/cdiffs.htm, que enfatiza não a diferença nos caminhos de evolução entre as duas linguagens, mas disseca, ponto por ponto, todas as diferenças entre os padrões ISO para o C (de 1999) e para o C++ (de 1998) que podem levar um programa escrito com uma das linguagens em mente a não funcionar ou apresentar comportamento diferente na outra (NOTA: tanto o C quanto o C++ ganharam novos padrões ISO em 2011, mas quase todas as diferenças apontadas continuam valendo).


4. Re: Codigo em C em um programa em C++

Théo Borém Fabris
TheoFabris

(usa Ubuntu)

Enviado em 24/04/2015 - 14:17h

Thihup escreveu:

Não entendi muito bem a pergunta, você se refere a usar um comando de C em C++?

Um código escrito em C pode ser muito bem compilado em C++ (salvo exceções)

Mas vamos fazer um teste:



Main.cpp

#include <stdio.h> // O Correto seria incluir a biblioteca <cstdio> pois importa "as coisas" para o namespace std; mais uma prova de que o compilador (G++) consegue "compilar" um arquivo de 'C'

int main(int argc, char **argv){
printf("Olá Mundo, estou em um arquivo de C++ compilado pelo G++ usando a biblioteca de C o.0\n");
return 0;
}


(Compile com : g++ -o Main Main.cpp)

Agora se quiser outros exemplos , posso citar : SDL,GLUT,GTK+ e muitos outros

Vou usar uma frase que eu li a pouco tempo atrás:
De certa maneira, eu acho justo que, ao mostrar exemplos de funções herdadas da biblioteca padrão do C pelo C++, tais exemplos sejam dados com programas que também são válidos em C


Ou seja, (quase) qualquer programa que você fizer em C será valido também em C++

Espero ter ajudado

Qualquer dúvida só postar aqui.

[]'s

T+

EDIT: Segue um exemplo da biblioteca SDL (que foi totalmente escrito em C) rodando em um aplicativo de C++:

#include <iostream>
#include <stdlib.h>
#include <SDL/SDL.h>

using namespace std;

int main ( int argc, char** argv )
{
// initialize SDL video
if ( SDL_Init( SDL_INIT_VIDEO ) < 0 )
{
cout << "Unable to init SDL: " << SDL_GetError() << endl;
return 1;
}

// make sure SDL cleans up before exit
atexit(SDL_Quit);

// create a new window
SDL_Surface* screen = SDL_SetVideoMode(640, 480, 16,
SDL_HWSURFACE|SDL_DOUBLEBUF);
if ( !screen )
{
cout << "Unable to set 640x480 video: " << SDL_GetError() << endl;
return 1;
}

// load an image
SDL_Surface* bmp = SDL_LoadBMP("cb.bmp");
if (!bmp)
{
cout << "Unable to load bitmap:" << SDL_GetError() << endl;
return 1;
}

// centre the bitmap on screen
SDL_Rect dstrect;
dstrect.x = (screen->w - bmp->w) / 2;
dstrect.y = (screen->h - bmp->h) / 2;

// program main loop
bool done = false;
while (!done)
{
// message processing loop
SDL_Event event;
while (SDL_PollEvent(&event))
{
// check for messages
switch (event.type)
{
// exit if the window is closed
case SDL_QUIT:
done = true;
break;

// check for keypresses
case SDL_KEYDOWN:
{
// exit if ESCAPE is pressed
if (event.key.keysym.sym == SDLK_ESCAPE)
done = true;
break;
}
} // end switch
} // end of message processing

// DRAWING STARTS HERE

// clear screen
SDL_FillRect(screen, 0, SDL_MapRGB(screen->format, 0, 0, 0));

// draw bitmap
SDL_BlitSurface(bmp, 0, screen, &dstrect);

// DRAWING ENDS HERE

// finally, update the screen :)
SDL_Flip(screen);
} // end main loop

// free loaded bitmap
SDL_FreeSurface(bmp);

// all is well ;)
printf("Exited cleanly\n");
return 0;
}



[!] Para executar é necessário possuir instalado a Biblioteca SDL e qualquer imagem com o nome de "cb.bmp".


Bem, tive algumas duvidas:
1. Para que serve "int main ( int argc, char** argv /i])"?
2. Para que serve a header #include <SDL/SDL.h>?




5. Re: Codigo em C em um programa em C++

Paulo
paulo1205

(usa Ubuntu)

Enviado em 24/04/2015 - 22:00h

TheoFabris escreveu:

Bem, tive algumas duvidas:
1. Para que serve "int main ( int argc, char** argv /i])"?


Nos programas em questão, para nada. Não sei por que o Thiago os colocou ali, se não pretendia usar.

Os padrões do C e do C++ preveem dois casos de declaração de main():

    1) quando não se tem interesse em receber argumentos do S.O. -- nesse caso, a declaração de main deve ser feita como

int main(void)  /* Serve em C ou C++ */ 

ou

int main()  // Apenas em C++; em C, parênteses vazios têm outro significado 


    2) quando se quer receber argumentos enviados pelo S.O. ou por outra aplicação -- nesse caso, a declaração de main deve ser

int main(int argc, char **argv)  /* tanto em C como C++ */ 

, sendo que os dois parâmetros são usados respectivamente para contar (argc) e apontar para o texto (argv[n], com 0<=n<argc) dos argumentos passados ao programa.

Note que em ambos os casos, o tipo de retorno de main() é int.

2. Para que serve a header #include <SDL/SDL.h>?


No exemplo dado pelo Thiago, ele usa a biblioteca SDL (de Simple DirectMedia Layer) para exibir uma imagem na tela. Esse cabeçalho contém a declaração das funções da SDL usadas por ele para esse fim.


6. Re: Codigo em C em um programa em C++

Thiago Henrique Hüpner
Thihup

(usa Manjaro Linux)

Enviado em 25/04/2015 - 08:17h

paulo1205 escreveu:

TheoFabris escreveu:

Bem, tive algumas duvidas:
1. Para que serve "int main ( int argc, char** argv /i])"?

Nos programas em questão, para nada. Não sei por que o Thiago os colocou ali, se não pretendia usar.


Coloquei esses argumentos, pois compilei o código no Windows , e lá é definido o SDL_main e é necessário os argumentos argc e argv

Espero ter ajudado

[]'s

T+


7. Re: Codigo em C em um programa em C++ [RESOLVIDO]

Paulo
paulo1205

(usa Ubuntu)

Enviado em 25/04/2015 - 13:05h

Windows e suas indefectível mania de violar padrões...


8. Re: Codigo em C em um programa em C++ [RESOLVIDO]

Thiago Henrique Hüpner
Thihup

(usa Manjaro Linux)

Enviado em 25/04/2015 - 13:19h

paulo1205 escreveu:

Windows e suas indefectível mania de violar padrões...

É verdade o.0

Mas consegui pegar meu notebook de novo e agora let's program in Linux

[]'s

T+






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts