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?