Linguagem C

15
História[editar | editar código-fonte ] Ken Thompson e Dennis Ritchie (da esquerda para direita), os criadores das linguagens B e C, respectivamente. O desenvolvimento inicial de C ocorreu no AT&T Bell Labs entre 1969 e 1973 . [5] de acordo com Ritchie, o período mais criativo ocorreu em 1972. A linguagem foi chamada "C", porque suas características foram obtidas a partir de uma linguagem anteriormente chamado de " B ", que de acordo com a Ken Thompson era versão reduzida da linguagem de programação BCPL . [6] A versão original PDP-11 do sistema Unix foi desenvolvido em assembly . Em 1973, com a adição dos tipos struct , a linguagem C tornou-se poderosa o suficiente para que a maior parte do kernel do Unix fosse reescrito em C. Este foi um dos primeiros núcleos de sistemas operacionais implementados numa linguagem diferente da linguagem Assembly. Em 1977, foram feitas novas mudanças por Ritchie e Stephen C. Johnson para facilitar a portabilidade do sistema operacional Unix. OPortable C Compiler de Johnson serviu de base para várias implementações de C em novas plataformas. [7] C K&R[editar | 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 [8] , mas em 1978 Brian Kernighan e Dennis Ritchie lançam o livro The C Programming Language . [9] que serviu de tutorial e mudou a história da programação em C. De fato essa primeira versão da linguagem é conhecida como "C Kernigham e Ritchie" ou apenas "C K&R". [10] Esse livro, conhecido pelos programadores de C como "K&R", serviu durante muitos anos como uma especificação informal da linguagem. A versão da linguagem C que ele descreve é usualmente referida como

description

Linguagem C

Transcript of Linguagem C

Page 1: Linguagem C

História[editar | editar código-fonte]

Ken Thompson e Dennis Ritchie (da esquerda para direita), os criadores das linguagens B e C,

respectivamente.

O desenvolvimento inicial de C ocorreu no AT&T Bell Labs entre 1969 e 1973.[5] de acordo

com Ritchie, o período mais criativo ocorreu em 1972. A linguagem foi chamada "C",

porque suas características foram obtidas a partir de uma linguagem anteriormente

chamado de " B", que de acordo com a Ken Thompson era versão reduzida da linguagem

de programação BCPL.[6]

A versão original PDP-11 do sistema Unix foi desenvolvido em assembly. Em 1973, com a adição dos tipos struct , a linguagem C tornou-se poderosa o suficiente para que a maior

parte do kernel do Unix fosse reescrito em C. Este foi um dos primeiros núcleos de

sistemas operacionais implementados numa linguagem diferente da linguagem Assembly.

Em 1977, foram feitas novas mudanças por Ritchie e Stephen C. Johnson para facilitar a

portabilidade do sistema operacional Unix. OPortable C Compiler de Johnson serviu de

base para várias implementações de C em novas plataformas.[7]

C K&R[editar | 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[8] , mas em 1978 Brian Kernighan e Dennis Ritchie lançam o livro The

C Programming Language.[9] que serviu de tutorial e mudou a história da programação em

C. De fato essa primeira versão da linguagem é conhecida como "C Kernigham e Ritchie"

ou apenas "C K&R".[10]

Esse livro, conhecido pelos programadores de C como "K&R", serviu durante muitos anos

como uma especificação informal da linguagem. A versão da linguagem C que ele

descreve é usualmente referida como "K&R C". A segunda edição do livro cobriu o padrão

posterior, o ANSI C. K&R C introduziu as seguintes características na linguagem:

Biblioteca padrão de E/S

Tipo de dados struct

Tipo de dados long int

Page 2: Linguagem C

Tipo de dados unsigned int

O operador =+  foi alterado para += , e =-  para -=  (o analisador léxico do compilador

fazia confusão entre i =+ 10  e i = +10 . O mesmo acontecia com =- )

K&R C é frequentemente considerado a parte mais básica da linguagem, cujo suporte

deve ser assegurado por um compilador C. Durante muitos anos, mesmo após a

introdução do padrão ANSI C, K&R C foi considerado o "menor denominador comum", em

que programadores de C se apoiavam quando uma portabilidade máxima era desejada, já

que nem todos os compiladores eram actualizados o bastante para suportar o padrão

ANSI C.

Nos anos que se seguiram à publicação do K&R C, algumas características "não-oficiais"

foram adicionadas à linguagem, suportadas por compiladores da AT&T e de outros

vendedores. Estas incluíam:

Funções void  e tipos de dados void *

Funções que retornam tipos struct  ou union

Campos de nome struct  num espaço de nome separado para cada tipo struct

Atribuição a tipos de dados struct

Qualificadores const  para criar um objecto só de leitura

Biblioteca padrão, que incorpora grande parte da funcionalidade implementada por

vários vendedores

Enumerações

Cálculos de ponto-flutuante em precisão simples (no K&R C, os cálculos intermediários eram feitos sempre em double , porque era mais eficiente na máquina

onde a primeira implementação do C foi feita)

Esta página ou secção cita fontes confiáveis e independentes, mas que não cobrem todo o conteúdo (desde agosto de 2013).

favor, adicione mais referências e insira-as corretamente no texto ou no rodapé. Material sem fontes poderá ser removido.

—Encontre fontes: Google (notícias, livros e acadêmico)

ANSI C e ISO C[editar | editar código-fonte]

Durante os finais da década de 1970, a linguagem C começou a substituir a

linguagem BASIC como a linguagem de programação de microcomputadores mais usada.

Durante adécada de 1980, foi adaptada para uso no PC IBM, e a sua popularidade

começou a aumentar significativamente. Ao mesmo tempo, Bjarne Stroustrup, juntamente

com outros nos laboratórios Bell, começou a trabalhar num projecto onde se adicionavam

extras para programação orientada por objectos à linguagem C. A linguagem que eles

produziram, chamada C++, é nos dias de hoje a linguagem de programação de aplicações

mais comum no sistema operativo Windows da companhia Microsoft. A linguagem C

permanece a mais popular no mundo Unix.

Em 1983, o instituto norte-americano de padrões (ANSI) formou um comité, X3J11, para

estabelecer uma especificação do padrão da linguagem C. Após um processo longo e

Page 3: Linguagem C

árduo, o padrão foi completo em 1989 e ratificado como ANSI X3.159-1989 "Programming

Language C". Esta versão da linguagem é frequentemente referida como ANSI C.

Em1990, o padrão ANSI C, após sofrer umas modificações menores, foi adotado

pela Organização Internacional para Padronização (ISO) como ISO/IEC 9899:1990,

também conhecido como C89 ou C90. Um dos objetivos do processo de padronização

ANSI C foi o de produzir um sobreconjunto do K&R C, incorporando muitas das

características não-oficiais subsequentemente introduzidas. Entretanto, muitos programas

tinham sido escritos e que não compilavam em certas plataformas, ou com um certo

compilador, devido ao uso de bibliotecas de funções não-padrão e ao fato de alguns

compiladores não aderirem ao ANSI C.

C99[editar | editar código-fonte]

Após o processo da padronização ANSI, as especificações da linguagem C permaneceram

relativamente estáticas por algum tempo, enquanto a linguagem C++ continuou a evoluir.

(em 1995, a Normative Amendment 1 criou uma versão nova da linguagem C mas esta

versão raramente é tida em conta.) Contudo, o padrão foi submetido a uma revisão nos

finais da década de 1990, levando à publicação da norma ISO 9899:1999 em 1999. Este

padrão é geralmente referido como "C99" e foi adoptado como um padrão ANSI em março

de 2000. As novas características do C99 incluem:

Funções em linha

Remoção de restrições sobre a localização da declaração de variáveis (como em C++)

Adição de vários tipos de dados novos, incluindo o long long int  (para minimizar

problemas na transição de 32-bits para 64-bits), um tipo de dados boolean explicito (chamado _Bool) e um tipo complex  que representa números complexos

Vetores  de dados de comprimento variável (o vetor pode ter um tamanho diferente a

cada execução de uma função, mas não cresce depois de criado)

Suporte oficial para comentários de uma linha iniciados por // , emprestados da

linguagem C++

Várias funções de biblioteca novas, tais como snprintf()

Vários ficheiros-cabeçalho novos, tais como stdint.h

O interesse em suportar as características novas de C99 parece depender muito das

entidades. Apesar do GCC e vários outros compiladores suportarem grande parte das

novas características do C99, os compiladores mantidos pela Microsoft e

pela Borland suportam pouquíssimos recursos do C99, e estas duas companhias não

parecem estar muito interessadas em adicionar tais funcionalidades, ignorando por

completo as normas internacionais. A Microsoft parece preferir dar mais ênfase ao C++.[11]

C11[editar | editar código-fonte]

Em 2007, se iniciou o trabalho em antecipação de outra revisão do padrão de C,

informalmente chamada de C11 ou C1X. O comitê dos padrões de C adotou regras para

Page 4: Linguagem C

limitar a inserção de novos recursos que não tenham ainda sido testados por

implementações existentes.[12]

Em dezembro de 2011 foi publicada a versão estável da especificação, como ISO/IEC

9899:2011.

Visão geral[editar | editar código-fonte]

C é uma linguagem imperativa e procedural, para implementação de sistemas. Seus

pontos de design foram para ele ser compilado, fornecendo acesso de baixo

nível àmemória e baixos requerimentos do hardware. Também foi desenvolvido para ser

uma linguagem de alto nível, para maior reaproveitamento do código. C foi útil para muitas

aplicações que foram codificadas originalmente em Assembly.

Essa propriedade não foi acidental; a linguagem C foi criada com o objectivo principal em

mente: facilitar a criação de programas extensos com menos erros, recorrendo

aoparadigma da programação procedural, mas sobrecarregando menos o autor

do compilador, cujo trabalho complica-se ao ter de realizar as características complexas da

linguagem. Para este fim, a linguagem C possui as seguintes características:

Uma linguagem extremamente simples, com funcionalidades não-essenciais, tais

como funções matemáticas ou manuseamento de ficheiros (arquivos), fornecida por

um conjunto de bibliotecas de rotinas padronizada

A focalização no paradigma de programação procedural

Um sistema de tipos simples que evita várias operações que não fazem sentido

Uso de uma linguagem de pré-processamento, o pré-processador de C, para tarefas

tais como a definição de macros e a inclusão de múltiplos ficheiros de código fonte

Ponteiros  dão maior flexibilidade à linguagem

Acesso de baixo nível, através de inclusões de código Assembly no meio do programa

C

Parâmetros que são sempre passados por valor para as funções e nunca por

referência (É possível simular a passagem por referência com o uso de ponteiros)

Definição do alcance lexical de variáveis

Estruturas de variáveis, (structs), que permitem que dados relacionados sejam

combinados e manipulados como um todo

Algumas características úteis, que faltam em C, podem ser encontradas em outras

linguagens, que incluem:

Segurança de tipo

Coletor de lixo  (mais comum em linguagens interpretadas)

Vetores que crescem automaticamete

Classes  ou objetos com comportamento (ver Orientação a objetos)

Page 5: Linguagem C

Clausuras

funções aninhadas

Sobrecarga de operadores

Meta-programação

Apoio nativo de multithreading e comunicação por rede

Apesar da lista de características úteis que C possui não ser longa, isso não tem sido um

impedimento à sua aceitação, pois isso permite que novos compiladores de C sejam

escritos rapidamente para novas plataformas, e também permite que o programador

permaneça sempre em controle do que o programa está a fazer. Isto é o que por várias

vezes permite o código de C correr de uma forma mais eficiente que muitas outras

linguagens. Tipicamente, só código de Assembly "afinado à mão" é que corre mais

rapidamente, pois possui um controle completo da máquina, mas avanços na área de

compiladores juntamente com uma nova complexidade nos processadores modernos

permitiram que a diferença tenha sido rapidamente eliminada. Uma consequência da

aceitação geral da linguagem C é que frequentemente os compiladores, bibliotecas e até

intérpretes de outras linguagens de nível maior sejam eles próprios implementados em C.

C tem como ponto forte, a sua eficiência, e é a linguagem de programação preferida para o

desenvolvimento de sistemas e softwares de base, apesar de também ser usada para

desenvolver programas de computador. É também muito usada no ensino de ciência da

computação, mesmo não tendo sido projetada para estudantes e apresentando algumas

dificuldades no seu uso. Outra característica importante de C, é sua proximidade do código

de máquina, que permite que um projetista seja capaz de fazer algumas previsões de

como o software irá se comportar, ao ser executado.

C tem como ponto fraco, a falta de proteção que dá ao programador. Praticamente tudo

que se expressa em um programa em C, pode ser executado, como por exemplo, pedir o

vigésimo membro de um vetor com apenas dez membros. Os resultados são muitas vezes

totalmente inesperados, e os erros, difíceis de encontrar.

Tipos de dados[editar | editar código-fonte]

C tem um sistema de tipos semelhante ao de alguns descendentes da linguagem ALGOL,

tais como Pascal. Possui tipos para números inteiros de vários tamanhos com e sem sinal, números de ponto flutuante, caracteres e estruturas ( struct s). C usa

extensivamente ponteiros, um tipo muito simples de referência que guarda o endereço de

memória da variável. O ponteiro pode ser desreferenciado, uma operação que busca o

objecto que se encontra na morada da memória que o ponteiro possui, morada essa que

pode ser manipulada através de aritmética de ponteiros. Durante o tempo de execução, o

ponteiro é simplesmente uma morada de máquina tais como aquelas manipuladas

emAssembly, mas em tempo de compilação possui um tipo complexo que indica o tipo do

objecto para onde ele aponta, permitindo que se verifique o tipo de expressões, incluindo

ponteiros. O tipo "string" (cadeia ou linha de texto) de C é simplesmente um ponteiro para

Page 6: Linguagem C

um vetor de caracteres e alocação dinâmica de memória, descrita abaixo, é efectuada

através de ponteiros.

Os ponteiros em C possuem um valor reservado especial, NULL , que indica que não estão

a apontar para uma morada. O uso desse valor como morada é muito útil na construção de

várias estruturas de dados, mas causa comportamento não-definido (possivelmente uma falha de sistema) ao ser desreferenciado. Um ponteiro que possui o valor NULL  é

chamado ponteiro nulo. Os ponteiros são declarados (e desreferenciados) com

um * (asterisco), portanto o tipo int* denota um ponteiro para número(s) inteiro(s). A

linguagem C também fornece um tipo especial de ponteiros, o void*, que se traduz num

ponteiro que aponta para um objecto de tipo desconhecido.

A linguagem C também tem apoio em nível de linguagem para vetores estáticos (de

dimensão fixa) de tipos. As disposições de tipos podem parecer ter mais que uma

dimensão apesar de serem tecnicamente disposições de disposições de tipos. Em

memória, tais estruturas são posicionadas com as linhas uma depois da outra (a

alternativa seria armazenar os dados em colunas, usado em outras linguagens). O acesso

a disposições de tipos é feito através de ponteiros e aritmética de ponteiros; o nome da

disposição é tratado como se fosse um ponteiro que aponta para o início da disposição.

Em certas aplicações não é razoável usarem-se disposições de tipos de dimensão fixa e

por isso a alocação dinâmica de memória pode ser usada para criar disposições de tipos

de dimensão variável.

Como a linguagem C é regularmente usada em programação de baixo-nível de sistemas,

há casos em que é necessário tratar um número inteiro como sendo um ponteiro, um

número de ponto flutuante como sendo um número inteiro ou um tipo de ponteiro como

sendo outro. Para estes casos, a linguagem C fornece a capacidade de "moldagem"

(também denominado "conversão de tipo" ou "casting"), uma operação que, caso seja

possível, força a conversão de um objecto de um tipo para outro. Apesar de ser por vezes

necessário, o uso de conversões de tipo sacrifica alguma segurança oferecida pelo

sistema de tipos.

int

O tipo de dado int (inteiro) serve para armazenar valores numéricos inteiros. Existem

vários tipos de inteiros, cada um de um tamanho diferente (dependendo do sistema

operacional e/ou arquitetura do processador):

int , pode possuir 16 bits, 32 bits ou 64 bits

short int , deve possuir tamanho de no mínimo 16 bits e não pode ser maior

que int

long int , deve possuir tamanho mínimo de 32 bits

long long int , deve possuir tamanho mínimo de 64 bits

Page 7: Linguagem C

Todos estes tipos de inteiros podem ainda ser declarados precedidos da

cláusula unsigned, o que faz com que só suporte números positivos. Isto faz com que, com

o mesmo tamanho, uma variável suporte mais números positivos do que um signed (todos

os inteiros são signed por omissão).

char

O tipo char ocupa 1 byte, e serve para armazenar caracteres ou inteiros. Isso significa que

o programa reserva um espaço de 8 bits na memória RAM ou em registradores do

processador para armazenar um valor (char de tamanho maior que 8 bits é permitido pela

linguagem, mas os casos são raros). Com vetores do tipo char é possível criarcadeias de

caracteres (strings).

float

O tipo de dado float serve para armazenar números de ponto flutuante, ou seja, com

casas decimais. O padrão mais utilizado nos últimos 10 anos é o IEEE 754-1985.

double

O tipo de dado double serve para armazenar números de ponto flutuante de dupla

precisão, normalmente tem o dobro do tamanho do float e portanto o dobro da capacidade.

O padrão mais adotado também é o IEEE 754-1985.

struct

Em C podem ser usadas estruturas (chamados de registos em outras linguagens de

programação). As estruturas são grupos de variáveis organizadas arbitráriamente pelo

programador. Uma estrutura pode criar um novo tipo de variável caso typedef seja usado

em sua declaração.

Relações com C++[editar | editar código-fonte]

A linguagem de programação C++ foi originalmente derivada do C para suportar

programação orientada a objetos. À medida que as linguagens C e C++ foram evoluindo

independentemente, a divisão entre as duas veio a aumentar. O padrão C99 criou um

número de características que entram em conflito. Hoje, as principais diferenças entre as

duas linguagens são:

inline  - em C++, funções em linha encontram-se no espaço global enquanto que em

C encontram-se no espaço local. Por outras palavras, isso significa que, em C++,

qualquer definição de qualquer função em linha (sem ser a respeito da sobrecarga de

funções de C++) tem de estar em conformidade com a "regra de uma definição" da

linguagem C++. Mas em C, a mesma função em linha pode ser definida de maneira

diferente em diferentes arquivos (ou ficheiros)

A palavra-chave bool , igual à usada em C++, em C99 necessita que se inclua o

ficheiro-cabeçalho <stdbool.h>  (_Bool está sempre disponível). Padrões anteriores

Page 8: Linguagem C

de C não definiam um tipo booleano e vários (e incompatíveis) métodos foram usados

para simular um tipo booleano

Algumas características originalmente desenvolvidas em C++ também apareceram em C.

Entre elas encontram-se:

protótipos de função (com declaração de tipos de parâmetros) e remoção do "int"

implícito

comentários de linha, indicados por // ; comentários de linha terminam com um

carácter de nova-linha

a palavra-chave inline

tipagem mais forte

Exemplos[editar | editar código-fonte]

Programa Olá Mundo[editar | editar código-fonte]

Ver artigo principal: Programa Olá Mundo

A seguinte aplicação foi publicada na primeira edição de C de K&R, e tornou-se no

programa de introdução padrão da maior parte dos livros sobre C. O programa envia o

texto "Olá, Mundo!" para a saída padrão, que é normalmente o console, mas que também

pode ser um ficheiro (ou arquivo), um outro dispositivo qualquer, ou até mesmo um bit

bucket, dependendo de como a saída-padrão é mapeada na altura em que o programa é

executado.

int main(void)

{

puts("Olá, Mundo!");

}

Apesar do programa acima correr corretamente, atualmente origina algumas mensagens

de aviso quando compilado como C ANSI. Essas mensagens podem ser eliminadas

efectuando umas pequenas alterações no programa original:

# include <stdio.h> /* Pacotes com funções de entrada e saída */

int main(void)

{

puts("Olá, Mundo!");

return 0; /* Retorna 0, pois `main` retorna um `int` */

}

/* Nova linha após fechar a chave principal */

Page 9: Linguagem C

A primeira linha do programa é uma diretiva de pré-processamento #include , que causa

com que o pré-processador substitua aquela linha pela totalidade do conteúdo do arquivo qual diretiva se refere. Neste caso o arquivo padrão stdio.h  (que contém protótipos de

funções para trabalho com entrada e saída) irá substituir a linha. Os caracteres <  e >  indicam que o arquivo stdio.h encontra-se no local em que, quando da

configuração do compilador, se definiu como padrão para localização dos ficheiros de

inclusão (header files, geralmente com a extensão .h).

A linha (não-vazia) seguinte indica que uma função denominada main será definida. A

função main tem um significado especial nos programas em C, pois é a função que é inicialmente executada (em inglês, entry point). Os caracteres {  e }  delimitam a extensão

da função. O termo int  define a função main como sendo uma função que retorna um

número inteiro. O termo void  indica que a função não aceita parâmetros. A função main,

normalmente aceita parâmetros, que são passado pela linha de comando. Os

compiladores e sistemas operacionais atuais reconhecem as seguintes declarações de

main:

int main(void);

int main(int argc, char *argv[]);

int main(int argc, char **argv);

A linha seguinte "chama", ou executa uma função chamada puts ; o arquivo

incluído, stdio.h , contém a informação que descreve a forma como a função puts  deve

ser chamada. Nesta chamada, é passado à função printf  um único argumento, a linha

de texto constante "Olá, Mundo!". A função puts  retorna um valor, um int , mas como

não é usado, é descartado pelo compilador. O comando return  retorna o valor 0 para o

sistema, que é interpretado pelo mesmo como que a função main() foi executada e encerrada com sucesso (sem erros). Por fim, o caracter }  indica o fim da função main .

Note-se que texto rodeado por /*  e */  (comentários de texto) é ignorado pelo

compilador. Os compiladores que obedecem à norma C99 também aceitam como comentários as linhas de texto que são precedidos por // .

Matemática[editar | editar código-fonte]

O seguinte código realiza seis operações

matemáticas, adição, subtração, multiplicação, divisão, exponenciação e radiciação, e em

seguida envia os seus respectivos resultados para a saída padrão (normalmente o

console).

# include <math.h> // necessária para pow() e sqrt()

# include <stdio.h> // necessária para printf() e getchar()

int main()

Page 10: Linguagem C

{

int a = 2, b = 3;

printf("%d + %d = %d\n", a, b, a + b);

printf("%d - %d = %d\n", a, b, a - b);

printf("%d x %d = %d\n", a, b, a * b);

printf("%d / %d = %0.1f\n", a, b, (float) a / b); // resultado

fracionário

printf("%d elevado a %d = %0.1f\n", a, b, pow(a, b)); // pow(base,

expoente)

printf("raiz quadrada de %d = %0.1f\n", a, sqrt(a));

getchar(); //O uso dessa função é necessária apenas nos sistemas

Windows, para manter o terminal (Prompt de comando) aberto

return 0;

}

Estruturas de dados[editar | editar código-fonte]

No exemplo seguinte, é criada uma estrutura composta por 3 elementos de tipos

diferentes. Após ser declarada uma variável "x" do tipo struct "y", onde "y" é o nome da estrutura, para se acessar os elementos usa-se a seguinte sintaxe: x.elemento .

# include <stdio.h>

struct Pessoa

{

char nome[64]; // vetor de 64 chars para o nome

unsigned short int idade;

char rg[13];

};

int main()

{

struct Pessoa exemplo = {"Fulano", 16, "00.000.000-00"}; //

declaração da variável "exemplo"

printf("Nome: %s\n", exemplo.nome);

printf("Idade: %hu\n", exemplo.idade);

printf("RG: %s\n", exemplo.rg);

getchar(); // desnecessário, mas comumente utilizado em ambientes

windows para "segurar" o terminal aberto

Page 11: Linguagem C

return 0;

}

Ou, equivalente:

# include <stdio.h>

typedef struct Pessoa

{

char nome[64]; // vetor de 64 chars para o nome

unsigned short int idade;

char rg[13];

} Pessoa;

int main()

{

Pessoa exemplo = {"Felipe", 16, "00.000.000-00"}; // declaração da

variável "exemplo"

printf("Nome: %s\n", exemplo.nome);

printf("Idade: %hu\n", exemplo.idade);

printf("RG: %s\n", exemplo.rg);

getchar();

return 0;

}

Baixo-nível[editar | editar código-fonte]

O exemplo que se segue apresenta código C de baixo-nível, as funções read e write.

Neste programa vamos ler de N para buf, blocos de bufsize neste caso 1024, para O.

Quando n for igual a 0, é porque a leitura acabou, sai do ciclo while e libera a memória

ocupada por buf.

# include <unistd.h>

# define bufsize 1024

int main(void)

{

int N,n,O;

char *buf;

Page 12: Linguagem C

buf = (char*) malloc (bufsize);

while(n=read(N, buf, bufsize))

write(O, buf,n);

free(buf);

return 0;

}

Ferramentas de programação[editar | editar código-fonte]

Bloodshed Dev-C++

IDE (Ambiente de desenvolvimento integrado) ,

como Code::Blocks, NetBeans e JetBrains CLion

GNU Compiler Collection

Automação de compilação , como make

Ver também[editar | editar código-fonte]

Outros projetos Wikimedia também contêm

material sobre este tema:

Livros e manuais no Wikilivros

C++

Linguagem compilada

Linguagem de programação

Linguagem de programação de alto nível

Lista de linguagens de programação

Unix

Compilador

Referências

1. Ir para cima↑ History of the C Programming Language (em inglês). Visitado em 23 de maio de 2010.

2. Ir para cima↑ Programming Language Popularity (em inglês). Visitado em 23 de maio de 2010.

3. Ir para cima↑ TIOBE Programming Community Index (em inglês). Visitado em 23 de maio de 2010.

4. Ir para cima↑ C – The Influence Factor of Many Popular Programming Languages (em inglês). Visitado em 23 de maio de 2010.

Page 13: Linguagem C

5. Ir para cima↑ RITCHIE , Dennis M. (January 1993). The Development of the C Language. Visitado em 1 January 2008. "The scheme of type composition adopted by C owes considerable debt to Algol 68, although it did not, perhaps, emerge in a form that Algol's adherents would approve of."

6. Ir para cima↑ A Brief History of C7. Ir para cima↑ (1978) "Portability of C Programs and the UNIX System". Bell System Tech.

J. 57 (6): 2021–2048.8. Ir para cima↑ Entrevista com Dennis Ritchie, Bjarne Stroustrup e James

Gosling(Inglês) Java Report e C++ Report (Julho de 2000). Visitado em 3 de junho de 2015.

9. Ir para cima↑ Kernighan, Brian W.; Ritchie, Dennis M. The C Programming Language (em inglês). Upper Saddle River, New Jersey: Prentice hall, 1978. 228 p. ISBN 0-13-110163-3

10. Ir para cima↑ Rosangle Hickson. Aprenda a programa em C, C++ e C#. 2a ed. [S.l.]: Campus. p. 3. ISBN 978-85-352-1479-6

11. Ir para cima↑ Microsoft dá mais ênfase ao C++ (em inglês). Visitado em 23 de maio de 2010.

12. Ir para cima↑ Grupo de trabalho do ISO C (em inglês). Visitado em 23 de maio de 2010