diff options
Diffstat (limited to 'pt-br/c-pt.html.markdown')
| -rw-r--r-- | pt-br/c-pt.html.markdown | 98 | 
1 files changed, 51 insertions, 47 deletions
| diff --git a/pt-br/c-pt.html.markdown b/pt-br/c-pt.html.markdown index 451df4f3..0dca7ab0 100644 --- a/pt-br/c-pt.html.markdown +++ b/pt-br/c-pt.html.markdown @@ -6,29 +6,31 @@ contributors:      - ["Árpád Goretity", "http://twitter.com/H2CO3_iOS"]  translators:      - ["João Farias", "https://github.com/JoaoGFarias"] +    - ["Elton Viana", "https://github.com/eltonvs"] +    - ["Cássio Böck", "https://github.com/cassiobsilva"]  lang: pt-br  filename: c-pt.el  ---  Ah, C. Ainda é **a** linguagem de computação de alta performance. -C é a liguangem de mais baixo nível que a maioria dos programadores -irão usar, e isso dá a ela uma grande velocidade bruta. Apenas fique -antento que este manual de gerenciamento de memória e C vai levanter-te -tão longe quanto você precisa.  +C é a linguagem de mais baixo nível que a maioria dos programadores +utilizarão, e isso dá a ela uma grande velocidade bruta. Apenas fique +atento se este manual de gerenciamento de memória e C vai te levar +tão longe quanto precisa.  ```c  // Comentários de uma linha iniciam-se com // - apenas disponível a partir do C99  /* -Comentários de multiplas linhas se parecem com este.  +Comentários de múltiplas linhas se parecem com este.  Funcionam no C89 também.  */  // Constantes: #define <palavra-chave> -#definie DAY_IN_YEAR 365 +#define DAY_IN_YEAR 365 -//enumarações também são modos de definir constantes. +//enumerações também são modos de definir constantes.  enum day {DOM = 1, SEG, TER, QUA, QUI, SEX, SAB};  // SEG recebe 2 automaticamente, TER recebe 3, etc. @@ -53,13 +55,13 @@ int soma_dois_ints(int x1, int x2); // protótipo de função  // O ponto de entrada do teu programa é uma função  // chamada main, com tipo de retorno inteiro  int main() { -	// Usa-se printf para escrever na tela,  +	// Usa-se printf para escrever na tela,  	// para "saída formatada"  	// %d é um inteiro, \n é uma nova linha      printf("%d\n", 0); // => Imprime 0  	// Todos as declarações devem acabar com  	// ponto e vírgula -	 +      ///////////////////////////////////////      // Tipos      /////////////////////////////////////// @@ -77,7 +79,7 @@ int main() {      // longs tem entre 4 e 8 bytes; longs long tem garantia      // de ter pelo menos 64 bits      long x_long = 0; -    long long x_long_long = 0;  +    long long x_long_long = 0;      // floats são normalmente números de ponto flutuante  	// com 32 bits @@ -92,7 +94,7 @@ int main() {      unsigned int ux_int;      unsigned long long ux_long_long; -	// caracteres dentro de aspas simples são inteiros  +	// caracteres dentro de aspas simples são inteiros  	// no conjunto de caracteres da máquina.      '0' // => 48 na tabela ASCII.      'A' // => 65 na tabela ASCII. @@ -103,7 +105,7 @@ int main() {  	// Se o argumento do operador `sizeof` é uma expressão, então seus argumentos  	// não são avaliados (exceto em VLAs (veja abaixo)). -	// O valor devolve, neste caso, é uma constante de tempo de compilação.  +	// O valor devolve, neste caso, é uma constante de tempo de compilação.      int a = 1;  	// size_t é um inteiro sem sinal com pelo menos 2 bytes que representa  	// o tamanho de um objeto. @@ -119,7 +121,7 @@ int main() {  	// Você pode inicializar um array com 0 desta forma:      char meu_array[20] = {0}; -	// Indexar um array é semelhante a outras linguages +	// Indexar um array é semelhante a outras linguagens  	// Melhor dizendo, outras linguagens são semelhantes a C      meu_array[0]; // => 0 @@ -128,7 +130,7 @@ int main() {      printf("%d\n", meu_array[1]); // => 2  	// No C99 (e como uma features opcional em C11), arrays de tamanho variável -	// VLA (do inglês), podem ser declarados também. O tamanho destes arrays  +	// VLA (do inglês), podem ser declarados também. O tamanho destes arrays  	// não precisam ser uma constante de tempo de compilação:      printf("Entre o tamanho do array: "); // Pergunta ao usuário pelo tamanho      char buf[0x100]; @@ -139,22 +141,22 @@ int main() {      int var_length_array[size]; // declara o VLA      printf("sizeof array = %zu\n", sizeof var_length_array); -	//Uma possível saída para esse programa seria: -    // > Entre o tamanho do array:: 10 +    // Uma possível saída para esse programa seria: +    // > Entre o tamanho do array: 10      // > sizeof array = 40 -	// String são apenas arrays de caracteres terminados por um  -	// byte NUL (0x00), representado em string pelo caracter especial '\0'. -	// (Não precisamos incluir o byte NUL em literais de string; o compilador +	// String são apenas arrays de caracteres terminados por um +	// byte nulo (0x00), representado em string pelo caracter especial '\0'. +	// (Não precisamos incluir o byte nulo em literais de string; o compilador  	// o insere ao final do array para nós.) -    char uma_string[20] = "Isto é uma string";  +    char uma_string[20] = "Isto é uma string";  	// Observe que 'é' não está na tabela ASCII  	// A string vai ser salva, mas a saída vai ser estranha -	// Porém, comentários podem conter acentos  +	// Porém, comentários podem conter acentos      printf("%s\n", uma_string); // %s formata a string -    printf("%d\n", uma_string[16]); // => 0 -    // i.e., byte #17 é 0 (assim como 18, 19, e 20) +    printf("%d\n", uma_string[17]); // => 0 +    // i.e., byte #18 é 0 (assim como o 19°, 20°, 21°...)  	// Se temos caracteres entre aspas simples, temos um caracter literal.  	// Seu tipo é `int`, *não* `char` (por razões históricas). @@ -174,13 +176,13 @@ int main() {      ///////////////////////////////////////      // Atalho para multiplas declarações: -    int i1 = 1, i2 = 2;  +    int i1 = 1, i2 = 2;      float f1 = 1.0, f2 = 2.0;      int a, b, c;      a = b = c = 0; -    // Aritimética é óbvia +    // Aritmética é óbvia      i1 + i2; // => 3      i2 - i1; // => 1      i2 * i1; // => 2 @@ -189,7 +191,7 @@ int main() {      f1 / f2; // => 0.5, mais ou menos epsilon      // Números e cálculos de ponto flutuante não são exatos -    // Modulo também existe +    // Módulo também existe      11 % 3; // => 2  	// Operadores de comparação provavelmente são familiares, @@ -205,7 +207,7 @@ int main() {      2 <= 2; // => 1      2 >= 2; // => 1 -	// C não é Python - comparações não se encadeam. +	// C não é Python - comparações não se encadeiam.      int a = 1;      // Errado:      int entre_0_e_2 = 0 < a < 2; @@ -220,17 +222,17 @@ int main() {      0 || 1; // => 1 (Ou lógico)      0 || 0; // => 0 -    //Expressão condicional ( ? : ) +    //Expressão condicional ternária ( ? : )      int a = 5;      int b = 10;      int z; -    z = (a > b) ? a : b; // => 10 "se a > b retorne a, senão retorne b."  +    z = (a > b) ? a : b; // => 10 "se a > b retorne a, senão retorne b."      //Operadores de incremento e decremento:      char *s = "iLoveC";      int j = 0;      s[j++]; // => "i". Retorna o j-ésimo item de s E DEPOIS incrementa o valor de j. -    j = 0;  +    j = 0;      s[++j]; // => "L". Incrementa o valor de j. E DEPOIS retorna o j-ésimo item de s.      // o mesmo com j-- e --j @@ -290,6 +292,8 @@ int main() {      for (i = 0; i <= 5; i++) {          ; // Use ponto e vírgula para agir como um corpo (declaração nula)      } +    // Ou +    for (i = 0; i <= 5; i++);  	// Criando branchs com escolhas múltiplas: switch()      switch (alguma_expressao_integral) { @@ -305,7 +309,7 @@ int main() {          exit(-1);          break;      } -     +      ///////////////////////////////////////      // Cast de tipos @@ -324,8 +328,8 @@ int main() {  	// Tipos irão ter overflow sem aviso      printf("%d\n", (unsigned char) 257); // => 1 (Max char = 255 se char tem 8 bits) -	// Para determinar o valor máximo de um `char`, de um `signed char` e de  -	// um `unisigned char`, respectivamente, use as macros CHAR_MAX, SCHAR_MAX  +	// Para determinar o valor máximo de um `char`, de um `signed char` e de +	// um `unisigned char`, respectivamente, use as macros CHAR_MAX, SCHAR_MAX  	// e UCHAR_MAX de <limits.h>  	// Tipos inteiros podem sofrer cast para pontos-flutuantes e vice-versa. @@ -338,7 +342,7 @@ int main() {      ///////////////////////////////////////  	// Um ponteiro é uma variável declarada para armazenar um endereço de memória. -	// Seu declaração irá também dizer o tipo de dados para o qual ela aponta. Você +	// Sua declaração irá também dizer o tipo de dados para o qual ela aponta. Você  	// Pode usar o endereço de memória de suas variáveis, então, brincar com eles.      int x = 0; @@ -360,13 +364,13 @@ int main() {      printf("%d\n", *px); // => Imprime 0, o valor de x  	// Você também pode mudar o valor que o ponteiro está apontando. -	// Teremo que cercar a de-referência entre parenteses, pois +	// Temos que cercar a de-referência entre parênteses, pois  	// ++ tem uma precedência maior que *.      (*px)++; // Incrementa o valor que px está apontando por 1      printf("%d\n", *px); // => Imprime 1      printf("%d\n", x); // => Imprime 1 -	// Arrays são um boa maneira de alocar um bloco contínuo de memória +	// Arrays são uma boa maneira de alocar um bloco contínuo de memória      int x_array[20]; // Declara um array de tamanho 20 (não pode-se mudar o tamanho      int xx;      for (xx = 0; xx < 20; xx++) { @@ -376,7 +380,7 @@ int main() {  	// Declara um ponteiro do tipo int e inicialize ele para apontar para x_array      int* x_ptr = x_array;  	// x_ptr agora aponta para o primeiro elemento do array (o inteiro 20). -	// Isto funciona porque arrays são apenas ponteiros para seu primeiros elementos. +	// Isto funciona porque arrays são apenas ponteiros para seus primeiros elementos.  	// Por exemplo, quando um array é passado para uma função ou é atribuído a um  	// ponteiro, ele transforma-se (convertido implicitamente) em um ponteiro.  	// Exceções: quando o array é o argumento de um operador `&` (endereço-de): @@ -392,7 +396,7 @@ int main() {      printf("%zu, %zu\n", sizeof arr, sizeof ptr); // provavelmente imprime "40, 4" ou "40, 8"  	// Ponteiros podem ser incrementados ou decrementados baseado no seu tipo -	// (isto é chamado aritimética de ponteiros +	// (isto é chamado aritmética de ponteiros      printf("%d\n", *(x_ptr + 1)); // => Imprime 19      printf("%d\n", x_array[1]); // => Imprime 19 @@ -410,9 +414,9 @@ int main() {  	// "resultados imprevisíveis" - o programa é dito ter um "comportamento indefinido"      printf("%d\n", *(my_ptr + 21)); // => Imprime quem-sabe-o-que? Talvez até quebre o programa. -	// Quando termina-se de usar um bloco de memória alocado, você pode liberá-lo, +	// Quando se termina de usar um bloco de memória alocado, você pode liberá-lo,  	// ou ninguém mais será capaz de usá-lo até o fim da execução -	// (Isto cham-se "memory leak"): +	// (Isto chama-se "memory leak"):      free(my_ptr);  	// Strings são arrays de char, mas elas geralmente são representadas @@ -534,7 +538,7 @@ int area(retan r)      return r.largura * r.altura;  } -// Se você tiver structus grande, você pode passá-las "por ponteiro"  +// Se você tiver structus grande, você pode passá-las "por ponteiro"  // para evitar cópia de toda a struct:  int area(const retan *r)  { @@ -551,8 +555,8 @@ conhecidos. Ponteiros para funções são como qualquer outro ponteiro  diretamente e passá-las para por toda parte.  Entretanto, a sintaxe de definição por ser um pouco confusa. -Exemplo: use str_reverso através de um ponteiro  -*/	 +Exemplo: use str_reverso através de um ponteiro +*/  void str_reverso_através_ponteiro(char *str_entrada) {      // Define uma variável de ponteiro para função, nomeada f.      void (*f)(char *); //Assinatura deve ser exatamente igual à função alvo. @@ -572,7 +576,7 @@ typedef void (*minha_função_type)(char *);  // Declarando o ponteiro:  // ... -// minha_função_type f;  +// minha_função_type f;  //Caracteres especiais:  '\a' // Alerta (sino) @@ -583,7 +587,7 @@ typedef void (*minha_função_type)(char *);  '\r' // Retorno de carroça  '\b' // Backspace  '\0' // Caracter nulo. Geralmente colocado ao final de string em C. -     //   oi\n\0. \0 é usado por convenção para marcar o fim da string.  +     //   oi\n\0. \0 é usado por convenção para marcar o fim da string.  '\\' // Barra invertida  '\?' // Interrogação  '\'' // Aspas simples @@ -603,7 +607,7 @@ typedef void (*minha_função_type)(char *);  "%p"    // ponteiro  "%x"    // hexadecimal  "%o"    // octal -"%%"    // imprime %  +"%%"    // imprime %  ///////////////////////////////////////  // Ordem de avaliação @@ -643,7 +647,7 @@ Se você tem uma pergunta, leia [compl.lang.c Frequently Asked Questions](http:/  É importante usar espaços e indentação adequadamente e ser consistente com seu estilo de código em geral.  Código legível é melhor que código 'esperto' e rápido. Para adotar um estilo de código bom e são, veja -[Linux kernel coding stlye](https://www.kernel.org/doc/Documentation/CodingStyle). +[Linux kernel coding style](https://www.kernel.org/doc/Documentation/CodingStyle).  Além disso, Google é teu amigo.  [1] http://stackoverflow.com/questions/119123/why-isnt-sizeof-for-a-struct-equal-to-the-sum-of-sizeof-of-each-member | 
