Discussão:C (linguagem de programação)

Origem: Wikipédia, a enciclopédia livre.
Saltar para a navegação Saltar para a pesquisa

Mudança no exemplo[editar código-fonte]

Mudei o typedef do último exemplo de "Pessoa" para "SUJEITO", para não haver ambiguidade com o struct "Pessoa". Alan Wink (discussão) 01h20min de 14 de junho de 2011 (UTC)

C11[editar código-fonte]

Adicionem informações sobre a versão C11, por favor. Kiazore (discussão) 19h42min de 14 de setembro de 2012 (UTC)

Links externos[editar código-fonte]

Coloquei um link externo para uma página com várias perguntas e respostas sobre C em língua portuguesa. Era o único link para conteúdo em português, então coloquei antes dos outros que eram em inglês. Não me atentei para o fato de que os outros links eram para páginas oficiais sobre a linguagem. Peço desculpas. O link foi removido por outro editor, que reclamou da ordem. Acho que uma atitude melhor teria sido apenas mudar a posição do link. O conteúdo é sobre C, é em português e é CC-BY-SA. Não consigo ver por que remover. O comentário, "discuta na página sobre a relevância do link, antes de o inserir" me parece ir contra a cultura da Wikipédia de "seja audaz". Acho que o melhor seria "coloque o link, se houver problema alguém edita (não remove) e/ou abre tópico na página de discussão". Enfim, o link é esse: http://pt.wikipedia.org/w/index.php?title=C_(linguagem_de_programa%C3%A7%C3%A3o)&action=historysubmit&diff=22323329&oldid=22217644. Gostaria de ouvir opiniões. Helder Ribeiro (discussão) 18h17min de 26 de outubro de 2010 (UTC)

Symbol support vote.svg Concordo. Não há porquê remover o link, já que está em português e ajudaria batante alguém que estivesse afim de aprender um pouco mais sobre a linguagem. Silent (Contact) 20h40min de 26 de outubro de 2010 (UTC)


Alto Nível x Baixo Nível[editar código-fonte]

A linguagem C quando foi criada era considerada de "alto nível". Hoje não existe unanimidade quanto à esta classificação, que parece ser subjetiva, dependendo da experiência do programador com outras linguagens de "mais alto nível" que C. Acho que o melhor é deixar explícito no artigo essa discordância, ao invés de se iniciar uma guerra de edição. o comentário precedente deveria ter sido assinado por Hjxkyw (discussão • contrib) 11h20min de 19 de outubro de 2011‎

Eu na verdade considero C como de médio nível, já que ela pode ser usada tanto para baixo nível (Linux (kernel) por exemplo, é feito em C) como para alto nível. Mas é melhor deixar como esta mesmo. !Silent (discussão) 13h50min de 19 de outubro de 2011 (UTC)

Symbol support vote.svg Concordo em tudo com o Silent, apesar de, se seguirmos o conselho do Ricvelozo à letra, de seguir os artigos da EN, nunca se poderia dizer que era de baixo nível. O facto da linguagem ser utilizada para implementações tradicionalmente realizadas por linguagens de baixo nível tem a ver com a eficiência dos compiladores e com algumas das suas estruturas muito semelhantes estruturalmente às do hardware. A linguagem é tanto ou mais abstrata que outras e a prova que é de alto nível é que é uma das linguagens mais portáteis que existem, o que seria impossível se estivesse muito "próxima" do hardware. --Stego (discussão) 18h46min de 19 de outubro de 2011 (UTC)
Veja Defining High, Mid and Low-Level Languages. Resumindo, uma linguagem para ser alto nível (ou médio nível) precisa de um nível maior de abstração, como coletores de lixo. Portabilidade de arquitetura conseguida através da abstração não é considerada médio nível, porque o código continua a ser 1:1. Uma operação de adição em C, por exemplo, é simplista e possui um código Assembly equivalente. Mas, uma operação em um array em Java, não (há checagem). --Ricvelozo (discussão) 20h06min de 19 de outubro de 2011 (UTC)
Desde quando um (e apenas um) autor é autoridade final sobre esse assunto ? Como disse antes, não existe consenso sobre isso, basta fazer uma consulta, por exemplo, no Stack Overflow, um site bastante conceituado de perguntas e respostas sobre programação, para comprovar. Aliás, o artigo na Wikipedia anglófona não toca nessa questão, justamente porque não é possível obter um consenso, e na prática é uma questão irrelevante.--Hjxkyw (discussão) 21h13min de 19 de outubro de 2011 (UTC)
Não é apenas um autor, como já tinha indicado outros. E o Stack Overflow não vale como fonte fiável, até porque lá os usuários usam a Wikipédia como fonte que, por sua vez, não é fiável. Ao menos citei uma fonte além da Wikipédia. "A linguagem C quando foi criada era considerada de "alto nível"." isso é considerado Wikipédia:POV seu, já que não cita nenhuma fonte. E mesmo que estivesse correto, o que vale é o que se considera atualmente. E escrever que a linguagem é alto nível e baixo nível, não diz nada, já que ambas as afirmações se contrastam. É o mesmo que dizer que uma pessoa é branca e negra. A linguagem C++, diferente de C, possui características que desviam a linguagem do baixo nível (proximidade a máquina), como name mangling. Tanto que, uma biblioteca C++ compilada usando o Visual C++ não é compatível com uma compilada usando o GCC, mas uma biblioteca C é compatível com qualquer compilador. Também, é um dos motivos de uma biblioteca C++ não poder ser usada completamente através de código C. Veja How can I create a C++ function f(int,char,float) that is callable by my C code?. --Ricvelozo (discussão) 23h50min de 19 de outubro de 2011 (UTC)
(1) Eu só vi um autor, e ademais, no que me concerne, um desconhecido: nunca vi uma referência alguma a ele, aparentemente não tem livros publicados, não é uma "autoridade". Não vejo como possa ser usado como referência. (2) Eu indiquei o StackOverflow não como referência (por isso não dei um link específico), mas sim como um site respeitado onde se pode amostrar as opiniões sobre o assunto. (3) O ponto crucial é que não existe uma definição de "alto nível" e "baixo nível" que seja universalmente aceita. O que existem são opiniões. (4) Originalmente, "alto nível" se referia a linguagens compiladas, onde um "comando" na "linguagem fonte" gerava (potencialmente) muitos "comandos" na "linguagem objeto" ("muitas instruções de máquina"), e "baixo nível" se referia a linguagens "assembly", onde um "comando" na "linguagem fonte" (uma "instrução assembly") gerava sempre um "comando" na "linguagem objeto" (uma "instrução de máquina"). (5) À medida que linguagens mais "poderosas" (com mais funcionalidade embutida) foram criadas, começou-se a questionar o fato de que as linguagens historicamente consideradas de "alto nível" talvez não o fossem. Mas isso é um assunto que nunca ficou definitivamente estabelecido, ficou sempre no reino da opinião pessoal de cada um. (6) Para muitas pessoas a linguagem C definitivamente não pode ser classificada como de baixo nível, pois atende o critério histórico acima (em (4)). (7) De mais a mais, essa classificação rígida, no caso da linguagem C não traz nenhuma vantagem prática, por isso é irrelevante. Tanto assim que o artigo na Wikipedia anglófona não toca no assunto. Eu acho de bom alvitre seguir o exemplo da Wikipedia anglófona, caso contrário será gerado um impasse permanente.--Hjxkyw (discussão) 01h18min de 20 de outubro de 2011 (UTC)
Ok. --Ricvelozo (discussão) 02h06min de 20 de outubro de 2011 (UTC)

Ric: quer comparar o nível de abstração de assembler com C? Por acaso já programou nas duas??? Se sim, é muito estranha essa sua insistência. Uma coisa é dizer que há linguagens de muito mais alto nível que C, outra, completamente diferente, é classificar C como "baixo nível" tout-court, sem sequer admitir que há muita gente que a classifica como sendo de alto nível! Por mim, tanto se me dá que classifiquem como baixo nível, alto nível, assim-assim-nível ou o que quer que seja, nunca tive pachorra para essas classificações tipo gaveta fechada, típicas principalmente de quem fala mais tempo a falar de programação do que com as mãos no teclado a codificar programas úteis, eficientes e realmente bem feitos, mesmo que não usem o isto ou aquilo, mas é completamente inadmissível que se chame de "baixo nível" sem sequer se mencionar que também há quem a classifique de médio e alto nível. --Stego (discussão) 00h34min de 20 de outubro de 2011 (UTC)

Sim, já programei nas duas e, não, não disse que possuem o mesmo nível de abstração (releia minha antepenúltima resposta), mas sim que são equivalentes (possui um código Assembly equivalente), afirmação que explico melhor na minha penúltima resposta. E, admitir que há muita gente que a classifica como sendo de alto nível não é o mesmo que estar correto, pois muita gente diz que a Lady Gaga possui uma genitália masculina, e isso não significa que seja verdade (ou mentira o.O). E, nunca tive pachorra para essas classificações tipo gaveta fechada, típicas principalmente de quem fala mais tempo a falar de programação..., o motivo da discussão não é ver quem sabe mais, ou quem mais "escreveu programas eficientes", mas sim como melhor redigir o tema do artigo; é o objetivo da Wikipédia trazer definições e classificações; não leve para o lado pessoal. --Ricvelozo (discussão) 02h17min de 20 de outubro de 2011 (UTC)
Ric, não foi minha intenção levar para o lado pessoal. Se perguntei se já tinha programado nas duas foi apenas porque se podia dar o caso (cada vez mais comum) de ser um programador (que pode até ser muito bom) que nunca programou realmente em C e ter "emprenhado pelos ouvidos" que era uma linguagem de baixo nível. Mais: eu na prática nunca programei grande coisa em assembler (para mim trabalhecos de escola não contam), mas deu para perceber em primeira mão a diferença abismal de nível de abstração, para mim muito maior entre C e assembler do que entre C e, para falar só daquilo que conheço, Java e aquelas coisas que a MS$ gosta de inventar. --Stego (discussão) 11h16min de 20 de outubro de 2011 (UTC)
Stego, só pra constar, Assembly != Assembler. !Silent (discussão) 15h43min de 20 de outubro de 2011 (UTC)
Obrigado pela chamada de atenção. Também tendo a concordar que, no contexto de uma enciclopédia se deve distinguir assemblyde assembler, mas essa é mais uma classificação muito discutível e está longe de ser universal. E o facto é que sempre ouvi falar em "programar em assembler" e nunca em "assembly", apesar de "toda a gente" saber a diferença entre uma linguagem e um compilador. Mas como é hábito aqui neste projeto, quando se trata de separar definições ou temas que em muitos contextos são análogos, em vez de dar mais do que um ponto de vista, apresentam-se as coisas como se não houvesse absolutamente nenhuma controvérsia, ao melhor estilo "esta é a verdade definitiva sobre este tema!!!", como se não existisse WP:NPOV. --Stego (discussão) 19h05min de 20 de outubro de 2011 (UTC)


Fontes[editar código-fonte]

"A linguagem C não teve um sucesso imediato após a sua criação e o seu uso ficou restrito a alguns laboratórios". Eu não encontrei, seja nas referências citadas, seja na segunda edição do "The C Programing Language", seja numa pesquisa na internet. Caso não existam fontes de tal informação, sugiro a retirada da referida frase. Petrolifero (discussão) 12h49min de 3 de junho de 2015 (UTC)

Adicionada referência [8], sobre a falta de sucesso imediato de C Petrolifero (discussão) 12h49min de 3 de junho de 2015 (UTC)