Código é tudo igual ? [RESOLVIDO]

1. Código é tudo igual ? [RESOLVIDO]

Silas Henrique
silash35

(usa Arch Linux)

Enviado em 21/11/2017 - 21:42h

Ultimamente eu tenho me interessado por programação e escolhi a linhagem c++,porem antes de querer aprender a programar de fato,me veio muitas duvidas sobre o funcionamento de algum programa escrito em c++
1-O compilador do C é o GCC e o do C++ é o G++ né ? Se o C++ é tipo uma evolução do C,porque o G++ não compila códigos em C também ?
2-Um programa sem interface gráfica,como o Hello Word,escrito em C++,teria o mesmo código de fosse portado pra linux,windows ou macOS ? se não,quais as diferenças
3-A resposta da questão anterior muda se for adicionado uma interface gráfica ao programa (Abrir uma janela escrita Hello Word)
4-O código sofre mudanças quando uma interface gráfica é adicionada,ou a interface gráfica é totalmente independente do código ? (O mesmo programa pode ter diferentes interfaces gráficas )
5-E como faz pra depois do programa ser compilado,ele ser transformado em .exe .deb ou etc ?


  


2. MELHOR RESPOSTA

Paulo
paulo1205

(usa Ubuntu)

Enviado em 22/11/2017 - 03:09h

silas333 escreveu:

Ultimamente eu tenho me interessado por programação e escolhi a linhagem c++,porem antes de querer aprender a programar de fato,me veio muitas duvidas sobre o funcionamento de algum programa escrito em c++
1-O compilador do C é o GCC e o do C++ é o G++ né ? Se o C++ é tipo uma evolução do C,porque o G++ não compila códigos em C também ?


Bem, comumente, quando escrito em letras maiúsculas, “GCC” designa GNU Compiler Collection, que é uma suite de compiladores para diversas linguagens, incluindo C, C++, Fortran, Ada e Go.

Cada linguagem tem seu próprio conjunto de características e requisitos, no caminho de converter um programa desde seu código fonte até um executável. Para facilitar a vida do usuário, diferentes programas foram criados de modo a orientar a compilação para uma linguagem específica. A referência a cada um desses programas costuma usar letras minúsculas (refletindo o nome que costuma ter no UNIX, que diferencia maiúsculas de minúsculas em nomes de arquivos). Assim, gcc costuma produzir um comportamento adequado (e.g. escolha de cabeçalhos e bibliotecas) à geração de um executável a partir código fonte em C, g++ a programas em C++, gfortran a programas em Fortran, etc.

No entanto, até mesmo esse comportamento pode ser controlado, de modo a se poder usar o gfortran para compilar C++ ou o g++ para compilar código em C. Isso pode ser alcançado através da opção -x, passada ao compilador.

Quanto a C++ ser uma evolução do C, eis uma questão de ponto de vista. Conquanto seja verdade que o C++ teve suas raízes como uma extensão à linguagem C, a partir de um determinado momento o C++ começou a trilhar um caminho próprio, introduzindo elementos incompatíveis com o C em que originalmente se baseou. Além disso, a própria linguagem C também evoluiu, introduzindo seus próprios elementos que não eram contemplados pelo C++.

A esse respeito, indico alguns artigos/sites interessantes (um pouco desatualizados, porque escritos antes dos padrões de 2011 do C++ e do C, mas instrutivos assim mesmo):

http://www.stroustrup.com/sibling_rivalry.pdf
http://david.tribble.com/text/cdiffs.htm

2-Um programa sem interface gráfica,como o Hello Word,escrito em C++,teria o mesmo código de fosse portado pra linux,windows ou macOS ? se não,quais as diferenças


Mesmo código fonte? Podem, sim.

Mesmo executável? Dificilmente, mas possível. A dificuldade reside no fato de que diferentes sistemas operacionais se apresentam de maneiras distintas aos programas que fazem uso deles. Escrever uma mensagem na tela, como faz o clássico “Hello, World.”, requer interação com o SO, tanto para solicitar a operação de escrita quanto para dizer o que deve ser escrito. Como isso é feito em baixo nível, no código já compilado, geralmente varia de sistema para sistema.

E pode existir até variação na saída, mesmo no nosso simples “Hello, World.”, porque a mensagem impressa costuma terminar com uma quebra de linha (“printf("Hello, World.\n");”). Essa quebra de linha no mundo UNIX produz um byte com valor 10, no Windows produz um par de bytes, com valores 13 e 10, e no MacOS tradicional produz um byte com valor 13. Cada uma dessas versões produziria texto não-convencional se fosse executada em algum dos outros sistemas.

3-A resposta da questão anterior muda se for adicionado uma interface gráfica ao programa (Abrir uma janela escrita Hello Word)


Não existe uma interface gráfica padronizada para o C ou o C++. Um programa que use interface gráfica tem de recorrer a alguma biblioteca fora do padrão da linguagem.

Existem múltiplas opções de bibliotecas para interface gráfica, algumas muito específicas para um determinado sistema (por exemplo: as bibliotecas nativas do Windows, produzidas pela Microsoft, ou as bibliotecas da Apple para o MacOS), outras que usam abstrações para permitir o máximo de portabilidade de código fonte entre diferentes sistemas (Qt, Gtk, FLTK, WxWidgets etc.), e outras que procuram imitar num sistema bibliotecas nativas de outros sistemas.

Entre as bibliotecas que criam abstrações, a Qt é provavelmente a que chega mais perto do ideal, pois está disponível para uma quantidade maior de plataformas que sua rival Gtk e produz resultados visualmente mais uniformes em plataformas diferentes do que o que se consegue com Gtk.

Obviamente, a portabilidade será em nível de código fonte. As abstrações permitidas por essas bibliotecas têm de ser mapeadas em operações concretas em cada sistema, e você pode imaginar que, se para escrever concretamente uma mera linha de texto já havia grandes diferenças entre sistemas distintos, mais ainda haverá no caso de interfaces gráficas.

4-O código sofre mudanças quando uma interface gráfica é adicionada,ou a interface gráfica é totalmente independente do código ? (O mesmo programa pode ter diferentes interfaces gráficas )


Depende de o que o programa faz e de como você vai organizar o código. Se o seu programa usar a GUI apenas para receber e exibir dados, é possível que você possa desacoplar bastante a computação da GUI. Mas se o seu programa for essencialmente visual, talvez esse acoplamento tenha de ser maior.

5-E como faz pra depois do programa ser compilado,ele ser transformado em .exe .deb ou etc ?


.EXE é o próprio resultado da compilação (incluindo a etapa de linking), ao menos no mundo Windows, ao passo que .deb é um formato de empacotamento para distribuição e instalação. Você quer saber como criar um instalador nos diferentes sistemas?

3. Re: Código é tudo igual ? [RESOLVIDO]

Rodrigo Albuquerque Serafim
raserafim

(usa Slackware)

Enviado em 22/11/2017 - 13:19h

excelente..!

as respostas do colega paulo1205 costumam ser muito bem escritas e completas..!

uma pena que meus tópicos nunca são em C / C++ para poder contar com suas contribuições..

parabéns!



4. Obrigado

Silas Henrique
silash35

(usa Arch Linux)

Enviado em 22/11/2017 - 13:51h

Respondeu todas as minhas duvidas,vou marcar como melhor resposta.Acho que já estou entendendo melhor o mundo da programação e sua resposta me ajudou muito a compreender como um programa se comporta em diferentes sistemas operacionais.Obrigado
Sem ódio ou extremismo.Por favor :)






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts