Re: [FUG-BR] RES: C/C++

2007-02-26 Por tôpico Nilson Debatin
Em Sáb, 2007-02-24 às 08:40 -0300, Anderson P. Matos - LINHARES ON LINE
escreveu:
 Paulo, a função main nem sempre deve retorna um valor, somente se você
 quiser, quando a função começa com void, significa que não retorna valor
 nenhum, e ainda você falou que a função main DEVE retornar um valor
 inteiro, isso também esta errado, a função pode retornar um char, float,
 double, usigned float...e mais um monte...
 
 Att. 

Sei que to uns dias atrasados mas quero ser mais um a frisar
que você está viajando na maionese, a função main **SEMPRE**
retorna um valor inteiro, você pode até fazer ela void só
que nesse caso quando seu programa terminar ele VAI SIM 
retornar um inteiro, o 0. Vai ser sempre sucesso, o que
nem sempre é verdade dependendo do que o programa fará, se
quiser andar mais na linha do correto, faça sempre ela int.

[]s
Nilson


-
Histórico: http://www.fug.com.br/historico/html/freebsd/
Sair da lista: https://www.fug.com.br/mailman/listinfo/freebsd


Re: [FUG-BR] RES: C/C++

2007-02-26 Por tôpico Ricardo Nabinger Sanchez
On Mon, 26 Feb 2007 09:14:09 -0300
Nilson Debatin [EMAIL PROTECTED] wrote:

  Paulo, a função main nem sempre deve retorna um valor, somente se você
  quiser, quando a função começa com void, significa que não retorna valor
  nenhum, e ainda você falou que a função main DEVE retornar um valor
  inteiro, isso também esta errado, a função pode retornar um char, float,
  double, usigned float...e mais um monte...
  
  Att. 
 
 Sei que to uns dias atrasados mas quero ser mais um a frisar
 que você está viajando na maionese, a função main **SEMPRE**
 retorna um valor inteiro, você pode até fazer ela void só
 que nesse caso quando seu programa terminar ele VAI SIM 
 retornar um inteiro, o 0. Vai ser sempre sucesso, o que
 nem sempre é verdade dependendo do que o programa fará, se
 quiser andar mais na linha do correto, faça sempre ela int.

Pela semântica da linguagem void main() não retorna nada.  Se retornasse
algo, o compilador estaria fazendo algo errado.  E ainda assim, muito depende
da parceria entre compilador e o sistema operacional.  Os padrões querem
que os programas em C funcionem (ou pelo menos compilem) independente do
sistema operacional e compilador.  É difícil garantir isso na prática.

De volta ao main, ele retornará algo útil se o programador assim quiser, ou
então, durante a ligação do programa, o compilador decidirá pelo programador
o que será retornado.  Se o programador não especificou nada, então será
retornado o que estiver ao alcance da mão.

Quem quiser ler adiante, apresento alguns fatos que podem ser interessantes
apenas para curiosos.  Para os demais, basta saber que main é especial para a
fase de ligação do programa (momento de geração do executável), e espera-se
que ela retorne um inteiro para indicar o status de finalização do programa.



% cat main.c
void main() {}
% gcc main.c
main.c: In function `main':
main.c:1: warning: return type of 'main' is not `int'
%  ./a.out 
Exit 16

Claramente 16 não é zero.  O que houve afinal?

% objdump -d a.out
...
0804848c main:
 804848c:   55  push   %ebp
 804848d:   89 e5   mov%esp,%ebp
 804848f:   83 ec 08sub$0x8,%esp
 8048492:   83 e4 f0and$0xfff0,%esp
 8048495:   b8 00 00 00 00  mov$0x0,%eax  # eax = 0
 804849a:   83 c0 0fadd$0xf,%eax  # eax = 0xf
 804849d:   83 c0 0fadd$0xf,%eax  # eax = 0x1e
 80484a0:   c1 e8 04shr$0x4,%eax  # eax = 1
 80484a3:   c1 e0 04shl$0x4,%eax  # eax = 16
 80484a6:   29 c4   sub%eax,%esp  # esp -= 16
 80484a8:   c9  leave  
 80484a9:   c3  ret
 80484aa:   90  nop
 80484ab:   90  nop
...


Ainda assim, da onde veio esse 16?  A última instrução executada antes do
programa finalizar foi a do endereço 0x08048326, sendo que a entrada nesse
trecho se deu pelo endereço 0x08048350:

Disassembly of section .plt:
08048320 .plt:
 8048320:   ff 35 34 96 04 08   pushl  0x8049634
 8048326:   ff 25 38 96 04 08   jmp*0x8049638
 804832c:   00 00   add%al,(%eax)
 804832e:   00 00   add%al,(%eax)
 8048330:   ff 25 3c 96 04 08   jmp*0x804963c
 8048336:   68 00 00 00 00  push   $0x0
 804833b:   e9 e0 ff ff ff  jmp8048320 _init+0x14
 8048340:   ff 25 40 96 04 08   jmp*0x8049640
 8048346:   68 08 00 00 00  push   $0x8
 804834b:   e9 d0 ff ff ff  jmp8048320 _init+0x14
 8048350:   ff 25 44 96 04 08   jmp*0x8049644
 8048356:   68 10 00 00 00  push   $0x10
 804835b:   e9 c0 ff ff ff  jmp8048320 _init+0x14


O conteúdo dos registradores antes desta última chamada para biblioteca
externa era:
(gdb) info registers
eax0x10 16
ecx0x1  1
edx0x10 16
ebx0x1  1
esp0xbfbfe744   0xbfbfe744
ebp0xbfbfe778   0xbfbfe778
esi0xbfbfe788   -1077942392
edi0x2804e2a0   671408800
eip0x80483260x8048326
eflags 0x282642
cs 0x33 51
ss 0x3b 59
ds 0x3b 59
es 0x3b 59
fs 0x3b 59
gs 0x1b 27

Só que neste ponto, a função main já foi executada há muitas instruções
atrás, e não retornou nada pra ninguém.  Mas o ligador não sabe disso, e azar
do programador, pois ele vai ligar a crt0.o de qualquer jeito.  E na crt0.o
se assume que o topo da pilha (e registrador eax, em x86) contém o parâmetro
que será usado como valor de retorno.

Nesse exemplo, tanto a última coisa empilhada (8048356: push $0x10) quanto o
eax contêm 0x0010, ou 16 em base decimal.  O byte menos significativo é
usado como valor de 

[FUG-BR] RES: C/C++

2007-02-24 Por tôpico Anderson P. Matos - LINHARES ON LINE
Paulo, a função main nem sempre deve retorna um valor, somente se você
quiser, quando a função começa com void, significa que não retorna valor
nenhum, e ainda você falou que a função main DEVE retornar um valor
inteiro, isso também esta errado, a função pode retornar um char, float,
double, usigned float...e mais um monte...

Att. 

 
Anderson P. Matos  
Analista de Suporte
Linhares Serviços On-Line
Tel: (27) 2103-8100
E-mail: [EMAIL PROTECTED]
-
Tel.: (27) 2103-8105 
Cel: (27) 9936-4186
E-mail: [EMAIL PROTECTED]  
Messenger: [EMAIL PROTECTED]
Skype: andersonpmatos

-Mensagem original-
De: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] Em
nome de Paulo Pires
Enviada em: sexta-feira, 23 de fevereiro de 2007 08:00
Para: Lista Brasileira de Discussão sobre FreeBSD (FUG-BR)
Assunto: Re: [FUG-BR] C/C++

On 2/21/07, Rodrigo Ferreira [EMAIL PROTECTED] wrote:
 Bom dia lista, venho tentando a algum tempo compilar/rodar arquivos .c
e
 .cpp, porem não obtive sucesso, antes de migrar para o FreeBSD eu
 utilizava o turbo c++ no win, e agora no Free estou tentando usar o
 gcc/g++, só que no programa mais simples que estou tentando fazer
 aparece erro.

 Programa teste:

 #include /usr/include/stdio.h
 #include /usr/include/conio.h

 void main (void)
 {
 puts (Alo Mundo);
 getch();
 }

 dai quando eu dou g++ teste.cpp, aparece esses erros:
 teste.cpp:2:32: /usr/include/conio.h: No such file or directory
 teste.cpp:5: error: `main' must return `int'
 teste.cpp: In function `int main(...)':
 teste.cpp:7: error: `getch' undeclared (first use this function)
 teste.cpp:7: error: (Each undeclared identifier is reported only once
 for each function it appears in.)

Um dos erros que eu ia apontar já foi apontado pelo compilador C++ (em
C não seria indicado como erro): a função main() deve retornar um
valor inteiro (int), de modo que tem que ser declarada como int
main() ou int main(int argc, char **argv) (ou ainda int main(int
argc, char *argv[])).  A isso está ligado ou outro erro no seu
programa, mas que não está indicado acima: para sair da função que
retorna int, você tem obrigatoriamente que ter um comando return
valor;, onde valor é uma expressão com valor inteiro (geralmente --
especialmente no UNIX -- main() retorna 0 quando é bem sucedido), ou
uma chamada exit(valor);, onde valor também é inteiro.

Quando você está incluindo arquivos de cabeçalho da biblioteca padrão,
a convenção é usar '#include cabeçalho.h', ao invés de '#include
cabeçalho.h'.  Esta última forma, usando aspas, é usada para
arquivos de cabeçalho criados pelo próprio programador, para
distingüi-los dos cabeçalhos padronizados.  Também não é usual colocar
o caminho completo dos arquivos, especialmente quando se está usando
cabeçalhos da biblioteca padrão (com , e não com aspas, pois o
compilador sabe como encontrá-los).

Como outros já disseram, conio.h não é um cabeçalho padrão e a função
getch(), que seria declarada nesse cabeçalho específico dos
compiladores da Borland, também não é comumente aceita no UNIX (pelo
menos não com o mesmo sentido que teria no compilador da Borland).
Principalmente enquanto você está aprendendo, procure aprender a
linguagem padrão, ao invés de uma implementação específica.

Outra coisa: seu arquivo indica programa em C++, mas o código que você
escreveu é C.  Não que esteja estritamente errado, mas a minha
recomendação pessoal é que se você vai usar apenas C em um módulo de
programa, use o compilador C (costuma ser mais rápido) e coloque nos
arquivos a extensão .c, ao invés de .cpp ou .cc.  Ou, então,
aprenda logo C++ através de exemplos usando recursos próprios do C++,
se quiser usar os recursos que essa linguagem oferece antes de ficar
viciado em C puro e simples.

-- 
Um abraço.
Paulo A. P. Pires

... Qui habet aurem audiat quid Spiritus dicat ecclesiis.
-
Histórico: http://www.fug.com.br/historico/html/freebsd/
Sair da lista: https://www.fug.com.br/mailman/listinfo/freebsd



-
Histórico: http://www.fug.com.br/historico/html/freebsd/
Sair da lista: https://www.fug.com.br/mailman/listinfo/freebsd


Re: [FUG-BR] RES: C/C++

2007-02-24 Por tôpico Diego Aranha
Acho que ele estava se referindo ao padrão ANSI:

http://www.delorie.com/djgpp/v2faq/faq22_25.html

E todos nós escrevemos código que respeita os padrões, certo? :)

--
Diego Aranha

On Saturday 24 February 2007 11:40, Anderson P. Matos - LINHARES ON LINE 
wrote:
 Paulo, a função main nem sempre deve retorna um valor, somente se você
 quiser, quando a função começa com void, significa que não retorna valor
 nenhum, e ainda você falou que a função main DEVE retornar um valor
 inteiro, isso também esta errado, a função pode retornar um char, float,
 double, usigned float...e mais um monte...

 Att.


 Anderson P. Matos
 Analista de Suporte
 Linhares Serviços On-Line
 Tel: (27) 2103-8100
 E-mail: [EMAIL PROTECTED]
 -
 Tel.: (27) 2103-8105
 Cel: (27) 9936-4186
 E-mail: [EMAIL PROTECTED]
 Messenger: [EMAIL PROTECTED]
 Skype: andersonpmatos

 -Mensagem original-
 De: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] Em
 nome de Paulo Pires
 Enviada em: sexta-feira, 23 de fevereiro de 2007 08:00
 Para: Lista Brasileira de Discussão sobre FreeBSD (FUG-BR)
 Assunto: Re: [FUG-BR] C/C++

 On 2/21/07, Rodrigo Ferreira [EMAIL PROTECTED] wrote:
  Bom dia lista, venho tentando a algum tempo compilar/rodar arquivos .c

 e

  .cpp, porem não obtive sucesso, antes de migrar para o FreeBSD eu
  utilizava o turbo c++ no win, e agora no Free estou tentando usar o
  gcc/g++, só que no programa mais simples que estou tentando fazer
  aparece erro.
 
  Programa teste:
 
  #include /usr/include/stdio.h
  #include /usr/include/conio.h
 
  void main (void)
  {
  puts (Alo Mundo);
  getch();
  }
 
  dai quando eu dou g++ teste.cpp, aparece esses erros:
  teste.cpp:2:32: /usr/include/conio.h: No such file or directory
  teste.cpp:5: error: `main' must return `int'
  teste.cpp: In function `int main(...)':
  teste.cpp:7: error: `getch' undeclared (first use this function)
  teste.cpp:7: error: (Each undeclared identifier is reported only once
  for each function it appears in.)

 Um dos erros que eu ia apontar já foi apontado pelo compilador C++ (em
 C não seria indicado como erro): a função main() deve retornar um
 valor inteiro (int), de modo que tem que ser declarada como int
 main() ou int main(int argc, char **argv) (ou ainda int main(int
 argc, char *argv[])).  A isso está ligado ou outro erro no seu
 programa, mas que não está indicado acima: para sair da função que
 retorna int, você tem obrigatoriamente que ter um comando return
 valor;, onde valor é uma expressão com valor inteiro (geralmente --
 especialmente no UNIX -- main() retorna 0 quando é bem sucedido), ou
 uma chamada exit(valor);, onde valor também é inteiro.

 Quando você está incluindo arquivos de cabeçalho da biblioteca padrão,
 a convenção é usar '#include cabeçalho.h', ao invés de '#include
 cabeçalho.h'.  Esta última forma, usando aspas, é usada para
 arquivos de cabeçalho criados pelo próprio programador, para
 distingüi-los dos cabeçalhos padronizados.  Também não é usual colocar
 o caminho completo dos arquivos, especialmente quando se está usando
 cabeçalhos da biblioteca padrão (com , e não com aspas, pois o
 compilador sabe como encontrá-los).

 Como outros já disseram, conio.h não é um cabeçalho padrão e a função
 getch(), que seria declarada nesse cabeçalho específico dos
 compiladores da Borland, também não é comumente aceita no UNIX (pelo
 menos não com o mesmo sentido que teria no compilador da Borland).
 Principalmente enquanto você está aprendendo, procure aprender a
 linguagem padrão, ao invés de uma implementação específica.

 Outra coisa: seu arquivo indica programa em C++, mas o código que você
 escreveu é C.  Não que esteja estritamente errado, mas a minha
 recomendação pessoal é que se você vai usar apenas C em um módulo de
 programa, use o compilador C (costuma ser mais rápido) e coloque nos
 arquivos a extensão .c, ao invés de .cpp ou .cc.  Ou, então,
 aprenda logo C++ através de exemplos usando recursos próprios do C++,
 se quiser usar os recursos que essa linguagem oferece antes de ficar
 viciado em C puro e simples.
-
Histórico: http://www.fug.com.br/historico/html/freebsd/
Sair da lista: https://www.fug.com.br/mailman/listinfo/freebsd


Re: [FUG-BR] RES: C/C++

2007-02-24 Por tôpico gethostbyname
Bom, creio que ele deve estar se referindo ao padrão mais atual da
linguagem, C99. O padrão ANSI já está meio obsoleto pelos padrões ISO
C89 e C99.

Teve um cara que liberou o C Completo e Total na rede um tempo atrás.
Puxa, logo o livro do Herbert Schildt, o pior autor de todos os tempos.

PS. A função main não retornar um valor é considerado um ERRO NÃO-FATAL.

gethostbyname

Diego Aranha escreveu:
 Acho que ele estava se referindo ao padrão ANSI:

 http://www.delorie.com/djgpp/v2faq/faq22_25.html

 E todos nós escrevemos código que respeita os padrões, certo? :)

 --
 Diego Aranha

 On Saturday 24 February 2007 11:40, Anderson P. Matos - LINHARES ON LINE 
 wrote:
   
 Paulo, a função main nem sempre deve retorna um valor, somente se você
 quiser, quando a função começa com void, significa que não retorna valor
 nenhum, e ainda você falou que a função main DEVE retornar um valor
 inteiro, isso também esta errado, a função pode retornar um char, float,
 double, usigned float...e mais um monte...

 Att.

 

-
Histórico: http://www.fug.com.br/historico/html/freebsd/
Sair da lista: https://www.fug.com.br/mailman/listinfo/freebsd


Re: [FUG-BR] RES: C/C++

2007-02-24 Por tôpico Nilton Jose Rizzo
On Sat, 24 Feb 2007 08:40:25 -0300, Anderson P. Matos - LINHARES ON LINE wrote
 Paulo, a função main nem sempre deve retorna um valor, somente se 
 você quiser, quando a função começa com void, significa que não 
 retorna valor nenhum, e ainda você falou que a função main DEVE 
 retornar um valor inteiro, isso também esta errado, a função pode 
 retornar um char, float, double, usigned float...e mais um monte...


   Essa exigencia é da linguagem c++ faça esse exemplo e veja 
   que o erro persiste


#include stdio.h

void main (void);

void main (void)
{
   printf (teste);
}


g++ -o teste teste.cpp
teste.cpp: In function `int main(...)':
teste.cpp:8: declaration of C function `int main(...)' conflicts with
teste.cpp:4: previous declaration `void main()' here


 
 Att.
 
 Anderson P. Matos  
 Analista de Suporte
 Linhares Serviços On-Line
 Tel: (27) 2103-8100
 E-mail: [EMAIL PROTECTED]
 -
 Tel.: (27) 2103-8105 
 Cel: (27) 9936-4186
 E-mail: [EMAIL PROTECTED]  
 Messenger: [EMAIL PROTECTED]
 Skype: andersonpmatos
 
 -Mensagem original-
 De: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] Em
 nome de Paulo Pires
 Enviada em: sexta-feira, 23 de fevereiro de 2007 08:00
 Para: Lista Brasileira de Discussão sobre FreeBSD (FUG-BR)
 Assunto: Re: [FUG-BR] C/C++
 
 On 2/21/07, Rodrigo Ferreira [EMAIL PROTECTED] wrote:
  Bom dia lista, venho tentando a algum tempo compilar/rodar arquivos .c
 e
  .cpp, porem não obtive sucesso, antes de migrar para o FreeBSD eu
  utilizava o turbo c++ no win, e agora no Free estou tentando usar o
  gcc/g++, só que no programa mais simples que estou tentando fazer
  aparece erro.
 
  Programa teste:
 
  #include /usr/include/stdio.h
  #include /usr/include/conio.h
 
  void main (void)
  {
  puts (Alo Mundo);
  getch();
  }
 
  dai quando eu dou g++ teste.cpp, aparece esses erros:
  teste.cpp:2:32: /usr/include/conio.h: No such file or directory
  teste.cpp:5: error: `main' must return `int'
  teste.cpp: In function `int main(...)':
  teste.cpp:7: error: `getch' undeclared (first use this function)
  teste.cpp:7: error: (Each undeclared identifier is reported only once
  for each function it appears in.)
 
 Um dos erros que eu ia apontar já foi apontado pelo compilador C++ 
 (em C não seria indicado como erro): a função main() deve retornar 
 um valor inteiro (int), de modo que tem que ser declarada como int 
 main() ou int main(int argc, char **argv) (ou ainda int main(int 
 argc, char *argv[])).  A isso está ligado ou outro erro no seu 
 programa, mas que não está indicado acima: para sair da função que 
 retorna int, você tem obrigatoriamente que ter um comando return 
 valor;, onde valor é uma expressão com valor inteiro (geralmente -
 - especialmente no UNIX -- main() retorna 0 quando é bem sucedido),
  ou uma chamada exit(valor);, onde valor também é inteiro.
 
 Quando você está incluindo arquivos de cabeçalho da biblioteca 
 padrão, a convenção é usar '#include cabeçalho.h', ao invés de '#include
 cabeçalho.h'.  Esta última forma, usando aspas, é usada para
 arquivos de cabeçalho criados pelo próprio programador, para
 distingüi-los dos cabeçalhos padronizados.  Também não é usual 
 colocar o caminho completo dos arquivos, especialmente quando se 
 está usando cabeçalhos da biblioteca padrão (com , e não com aspas,
  pois o compilador sabe como encontrá-los).

Só um parentses nesse bapo, se me permite PAPiris...
o include com  significa que o compilador irar procurar pelo arquivo
nos PATH padrão de pesquisa (INCLUDE) e com  só irá pesquisar no 
diretório atual

por exemplo:

#include stdio.h

ele irá procurar em /usr/include e /usr/X11R6/include.  Essa procura
é feita adicionando o PATH ao nome do arquivo e o compilador tenta abri-lo
caso vc precise de arquivos system net ou outro qualquer
deve ser feito da forma:

#include sys/time.h

caso voce queira incluir ou modificar a pesquisa olhe as opções -I (include)
e -L (lib) do gcc
e veja também sobre variáveis de ambiente (INCLUDE/LIB/CC e outras)


 
 Como outros já disseram, conio.h não é um cabeçalho padrão e a função
 getch(), que seria declarada nesse cabeçalho específico dos
 compiladores da Borland, também não é comumente aceita no UNIX (pelo
 menos não com o mesmo sentido que teria no compilador da Borland).
 Principalmente enquanto você está aprendendo, procure aprender a
 linguagem padrão, ao invés de uma implementação específica.
 
 Outra coisa: seu arquivo indica programa em C++, mas o código que 
 você escreveu é C.  Não que esteja estritamente errado, mas a minha 
 recomendação pessoal é que se você vai usar apenas C em um módulo de 
 programa, use o compilador C (costuma ser mais rápido) e coloque nos 
 arquivos a extensão .c, ao invés de .cpp ou .cc.  Ou, então, 
 aprenda logo C++ através de exemplos usando recursos próprios do C++,
  se quiser usar os recursos que essa linguagem oferece antes de 
 ficar viciado em C puro e 

Re: [FUG-BR] RES: C/C++

2007-02-24 Por tôpico Paulo Pires
On 2/24/07, Anderson P. Matos - LINHARES ON LINE
[EMAIL PROTECTED] wrote:
 Paulo, a função main nem sempre deve retorna um valor, somente se você
 quiser, quando a função começa com void, significa que não retorna valor
 nenhum, e ainda você falou que a função main DEVE retornar um valor
 inteiro, isso também esta errado, a função pode retornar um char, float,
 double, usigned float...e mais um monte...

Obrigado pela lembrança.  Eu já trabalhei com compilador C para outras
arquiteturas e outros sistemas operacionais, e já fiz muito void
main() -- mas nunca um double main() -- , mas vale o recado para
que os outros saibam que em C é possível ter outros tipos de retorno
para main() em determinadas situações.

Entretanto, note que eu disse que era um erro em C++, que era a
linguagem do programa original, e disse explicitamente que não seria
indicado como erro em C.  Note também que não estamos falando de
CP/M-80 ou de alguma dispositivo embarcado usando microPIC, mas de
UNIX, onde um comando return dentro de main(), mesmo em C, retorna
ao sistema operacional um valor para ser informado como estado de
saída do processo, e que esse valor de estado é um inteiro.

-- 
Um abraço.
Paulo A. P. Pires

... Qui habet aurem audiat quid Spiritus dicat ecclesiis.
-
Histórico: http://www.fug.com.br/historico/html/freebsd/
Sair da lista: https://www.fug.com.br/mailman/listinfo/freebsd


Re: [FUG-BR] RES: C/C++

2007-02-24 Por tôpico Paulo Pires
On 2/24/07, gethostbyname [EMAIL PROTECTED] wrote:
 Bom, creio que ele deve estar se referindo ao padrão mais atual da
 linguagem, C99. O padrão ANSI já está meio obsoleto pelos padrões ISO
 C89 e C99.

Você está fazendo alguma confusão.  C89 é ANSI, cujo correspondente
ISO (praticamente idêntico, apenas recredenciado) é o C90.

 Teve um cara que liberou o C Completo e Total na rede um tempo atrás.
 Puxa, logo o livro do Herbert Schildt, o pior autor de todos os tempos.

Não sei se é *o* pior, mas é um cara que claramente escreve sobre o
que ele acha que vai lhe render uns trocados.  É provável que o
compromisso dele seja mais com fazer dinheiro rapidamente do que com a
qualidade do que escreve.  Nessa linha, o mais lamentável é quando, ao
invés de ensinar a linguagem de programação a que se propõe na capa,
ele começa a fazer apologia de determinadas tecnologias e de certos
fabricantes de software (sobretudo do estado de Washington), talvez a
fim de dar impulso a outros de seus livros.

 PS. A função main não retornar um valor é considerado um ERRO NÃO-FATAL.

Eu freqüentemente compilo com -Werror -Wall; existem motivos para
que o compilador emita warinings, ou eles não estariam lá.  Um exemplo
que volta e meia acontece comigo é usar = em lugar de ==; às vezes
é intencional e às vezes por distração ou erro de digitação, mas um
warning é bem-vindo nos dois casos.  Todos sabemos fazer e às vezes
somos forçados a fazer bacalhaus no código, mas também sabemos como
usar a linguagem para, de forma sintaticamente correta e
estilisticamente mais produtiva (no sentido de dar clareza que
facilite a manutenção de código no futuro), fazer calar qualquer
warning, mesmo quando se usa -pedantic.

-- 
Um abraço.
Paulo A. P. Pires

... Qui habet aurem audiat quid Spiritus dicat ecclesiis.
-
Histórico: http://www.fug.com.br/historico/html/freebsd/
Sair da lista: https://www.fug.com.br/mailman/listinfo/freebsd


Re: [FUG-BR] RES: C/C++

2007-02-24 Por tôpico gethostbyname

Essa exigência não é apenas da linguagem C++:

*ISO/IEC 9899:1999 (E)©ISO/IEC*

*5.1.2.2.1 Program startup*
The function called at program startup is named main. The implementation
declares no prototype for this function. It shall be defined **with a
return type of int** and with no parameters:
*int *main(void) { /*...*/ }
or with two parameters (referred to here as argc and argv, though any
names may be used, as they are local to the function in which they are
declared):
*int *main(int argc, char *argv[]) { /*...*/ }
or equivalent [ver a Nota]; or in some other implementation-defined manner.

*Nota*:
Thus, int can be replaced by a typedef name defined as int,or the type
of argv can be written as char ** argv, and so on.

gethostbyname

Nilton Jose Rizzo escreveu:
Essa exigencia é da linguagem c++ faça esse exemplo e veja 
que o erro persiste


 #include stdio.h

 void main (void);

 void main (void)
 {
printf (teste);
 }

   

-
Histórico: http://www.fug.com.br/historico/html/freebsd/
Sair da lista: https://www.fug.com.br/mailman/listinfo/freebsd


Re: [FUG-BR] RES: C/C++

2007-02-24 Por tôpico gethostbyname
Paulo Pires escreveu:
 Você está fazendo alguma confusão.  C89 é ANSI, cujo correspondente
 ISO (praticamente idêntico, apenas recredenciado) é o C90.

   
Exatamente. Foi um equívoco: C90[ISO - o padrão ANSI com pequenas
modificações] por C89 [ANSI].
 Teve um cara que liberou o C Completo e Total na rede um tempo atrás.
 Puxa, logo o livro do Herbert Schildt, o pior autor de todos os tempos.
 

 Não sei se é *o* pior, mas é um cara que claramente escreve sobre o
 que ele acha que vai lhe render uns trocados.  É provável que o
 compromisso dele seja mais com fazer dinheiro rapidamente do que com a
 qualidade do que escreve.  Nessa linha, o mais lamentável é quando, ao
 invés de ensinar a linguagem de programação a que se propõe na capa,
 ele começa a fazer apologia de determinadas tecnologias e de certos
 fabricantes de software (sobretudo do estado de Washington), talvez a
 fim de dar impulso a outros de seus livros.
   
Acho que o pior é um livro de C++ dele cuja boa parte é uma introdução
a C, que por sua vez é a cópia de alguns capítulos do C Completo e Total.
 PS. A função main não retornar um valor é considerado um ERRO NÃO-FATAL.
 

 Eu freqüentemente compilo com -Werror -Wall; existem motivos para
 que o compilador emita warinings, ou eles não estariam lá.  Um exemplo
 que volta e meia acontece comigo é usar = em lugar de ==; às vezes
 é intencional e às vezes por distração ou erro de digitação, mas um
 warning é bem-vindo nos dois casos.  Todos sabemos fazer e às vezes
 somos forçados a fazer bacalhaus no código, mas também sabemos como
 usar a linguagem para, de forma sintaticamente correta e
 estilisticamente mais produtiva (no sentido de dar clareza que
 facilite a manutenção de código no futuro), fazer calar qualquer
 warning, mesmo quando se usa -pedantic.

   
Mudando de assunto, vocês usando quais ferramentas para programação? Emacs?

falou,
gethostbyname
-
Histórico: http://www.fug.com.br/historico/html/freebsd/
Sair da lista: https://www.fug.com.br/mailman/listinfo/freebsd


Re: [FUG-BR] RES: C/C++

2007-02-24 Por tôpico gethostbyname

Essa exigência não é apenas da linguagem C++:

*ISO/IEC 9899:1999 (E)©ISO/IEC*

*5.1.2.2.1 Program startup*
The function called at program startup is named main. The implementation
declares no prototype for this function. It shall be defined **with a
return type of int** and with no parameters:
*int *main(void) { /*...*/ }
or with two parameters (referred to here as argc and argv, though any
names may be used, as they are local to the function in which they are
declared):
*int *main(int argc, char *argv[]) { /*...*/ }
or equivalent; or in some other implementation-defined manner.

*Nota*:
Thus, int can be replaced by a typedef name defined as int,or the type
of argv can be written as char ** argv, and so on.

gethostbyname

Nilton Jose Rizzo escreveu:
Essa exigencia é da linguagem c++ faça esse exemplo e veja 
que o erro persiste


 #include stdio.h

 void main (void);

 void main (void)
 {
printf (teste);
 }

   


-
Histórico: http://www.fug.com.br/historico/html/freebsd/
Sair da lista: https://www.fug.com.br/mailman/listinfo/freebsd


Re: [FUG-BR] RES: C/C++

2007-02-24 Por tôpico gethostbyname
Paulo Pires escreveu:
 Você está fazendo alguma confusão.  C89 é ANSI, cujo correspondente
 ISO (praticamente idêntico, apenas recredenciado) é o C90.

   
Exatamente. Foi um equívoco: C90[ISO - o padrão ANSI com pequenas
modificações] por C89 [ANSI].
 Teve um cara que liberou o C Completo e Total na rede um tempo atrás.
 Puxa, logo o livro do Herbert Schildt, o pior autor de todos os tempos.
 

 Não sei se é *o* pior, mas é um cara que claramente escreve sobre o
 que ele acha que vai lhe render uns trocados.  É provável que o
 compromisso dele seja mais com fazer dinheiro rapidamente do que com a
 qualidade do que escreve.  Nessa linha, o mais lamentável é quando, ao
 invés de ensinar a linguagem de programação a que se propõe na capa,
 ele começa a fazer apologia de determinadas tecnologias e de certos
 fabricantes de software (sobretudo do estado de Washington), talvez a
 fim de dar impulso a outros de seus livros.
   
Acho que o pior é um livro de C++ dele cuja boa parte é uma introdução
a C, que por sua vez é a cópia de alguns capítulos do C Completo e Total.
 PS. A função main não retornar um valor é considerado um ERRO NÃO-FATAL.
 

 Eu freqüentemente compilo com -Werror -Wall; existem motivos para
 que o compilador emita warinings, ou eles não estariam lá.  Um exemplo
 que volta e meia acontece comigo é usar = em lugar de ==; às vezes
 é intencional e às vezes por distração ou erro de digitação, mas um
 warning é bem-vindo nos dois casos.  Todos sabemos fazer e às vezes
 somos forçados a fazer bacalhaus no código, mas também sabemos como
 usar a linguagem para, de forma sintaticamente correta e
 estilisticamente mais produtiva (no sentido de dar clareza que
 facilite a manutenção de código no futuro), fazer calar qualquer
 warning, mesmo quando se usa -pedantic.

   
Mudando de assunto, vocês usando quais ferramentas para programação? Emacs?

falou,
gethostbyname


-
Histórico: http://www.fug.com.br/historico/html/freebsd/
Sair da lista: https://www.fug.com.br/mailman/listinfo/freebsd


Re: [FUG-BR] RES: C/C++

2007-02-24 Por tôpico Paulo Pires
On 2/25/07, gethostbyname [EMAIL PROTECTED] wrote:

 Essa exigência não é apenas da linguagem C++:

 *ISO/IEC 9899:1999 (E)(c)ISO/IEC*

 *5.1.2.2.1 Program startup*
 The function called at program startup is named main. The implementation
 declares no prototype for this function. It shall be defined **with a
 return type of int** and with no parameters:
 *int *main(void) { /*...*/ }
 or with two parameters (referred to here as argc and argv, though any
 names may be used, as they are local to the function in which they are
 declared):
 *int *main(int argc, char *argv[]) { /*...*/ }
 or equivalent [ver a Nota]; or in some other implementation-defined manner.

 *Nota*:
 Thus, int can be replaced by a typedef name defined as int,or the type
 of argv can be written as char ** argv, and so on.

Eu não se se foi coisa da lista, mas aqui apareceu um monte de
asteriscos (acho que você que usou negritos), fazendo parecer
ponteiros; eu achei um PDF do padrão através do Google (talvez o mesmo
que você achou, em
http://www.nirvani.net.nyud.net:8090/docs/ansi_c.pdf), onde vi que
eu não estava louco com um bando de ponteiros. :)

Mas veja o ponto-e-vírgula antes de or some other
implementation-defined manner.  Visualmente, acho que outra arrumação
poderia aumentar mais a clareza, mas o que entendo é que uma
implementação hosted (isto é, aquela que executa em um sistema
operacional) pode optar entre retornar int _ou_ alguma outra maneira
definida pela implementação.  Se optar por int, então deve aceitar
int main(void){/*...*/} *e* int main(int argc, char *argv[]){/*...*/}.
 Mas que o fraseamento e a composição visual não ajudam na clareza,
não ajudam mesmo.

-- 
Um abraço.
Paulo A. P. Pires

... Qui habet aurem audiat quid Spiritus dicat ecclesiis.
-
Histórico: http://www.fug.com.br/historico/html/freebsd/
Sair da lista: https://www.fug.com.br/mailman/listinfo/freebsd


Re: [FUG-BR] RES: C/C++

2007-02-24 Por tôpico Diego Aranha
Depende do tamanho do projeto.

Se for pequeno, uso o vi/vim mesmo.
Se não for, gosto do Eclipse (o que eu realmente gosto nele é aquele Navigator 
do lado esquerdo da janela). :)

--
Diego Aranha

 Mudando de assunto, vocês usando quais ferramentas para programação? Emacs?

 falou,
 gethostbyname


 -
 Histórico: http://www.fug.com.br/historico/html/freebsd/
 Sair da lista: https://www.fug.com.br/mailman/listinfo/freebsd
-
Histórico: http://www.fug.com.br/historico/html/freebsd/
Sair da lista: https://www.fug.com.br/mailman/listinfo/freebsd


Re: [FUG-BR] RES: C/C++

2007-02-24 Por tôpico Paulo Pires
On 2/25/07, gethostbyname [EMAIL PROTECTED] wrote:
 Mudando de assunto, vocês usando quais ferramentas para programação? Emacs?

Não.  Eu sempre usei o vi que vinha com o BSD (nvi) e compilava tudo
na linha de comando mesmo.  Como eu comecei com Turbo C, acostumei-me
a usar syntax-highlighting, e passei a usar vim, para ter esse
recurso.  Nunca usei e-macs além de uns poucos testes, há mais de dez
anos.

Já tentei IDEs para UNIX.  Achei todos pesados e pouco producentes, e
voltei à combinação emulador de terminal (ou
console)+shell+{,n}vi{,m}+gcc/g++/make/rcs.  Mas, é claro, eu não faço
sistemas de grande porte, que justificariam um ambiente mais cheio de
gueriguéris.

-- 
Um abraço.
Paulo A. P. Pires

... Qui habet aurem audiat quid Spiritus dicat ecclesiis.
-
Histórico: http://www.fug.com.br/historico/html/freebsd/
Sair da lista: https://www.fug.com.br/mailman/listinfo/freebsd


Re: [FUG-BR] RES: C/C++

2007-02-24 Por tôpico gethostbyname
Paulo Pires escreveu:
 Eu não se se foi coisa da lista, mas aqui apareceu um monte de
 asteriscos (acho que você que usou negritos), fazendo parecer
 ponteiros; eu achei um PDF do padrão através do Google (talvez o mesmo
 que você achou, em
 http://www.nirvani.net.nyud.net:8090/docs/ansi_c.pdf), onde vi que
 eu não estava louco com um bando de ponteiros. :)

 Mas veja o ponto-e-vírgula antes de or some other
 implementation-defined manner.  Visualmente, acho que outra arrumação
 poderia aumentar mais a clareza, mas o que entendo é que uma
 implementação hosted (isto é, aquela que executa em um sistema
 operacional) pode optar entre retornar int _ou_ alguma outra maneira
 definida pela implementação.  Se optar por int, então deve aceitar
 int main(void){/*...*/} *e* int main(int argc, char *argv[]){/*...*/}.
  Mas que o fraseamento e a composição visual não ajudam na clareza,
 não ajudam mesmo.

   

Foi mal pessoal. Estava alterando as configurações aqui.
Acho que eu dupliquei duas mensagens e fazendo essa lambança também :-)
Bom, não entendi muito bem sobre o que você quis dizer com a questão da
composição visual e da outra arrumação.

Os compiladores podem até aceitar outros retornos de main além de int,
mas isso não é portável. Essa é a minha concepção.

Estive pesquisando sobre o assunto agora e veja que engraçado:

  FYI, the first Google Usenet msg use of '*void main*' was in 1984:
  http://groups.google.com/group/net.lang.c/msg/644f6489bb23c5ab?hl=en

gethostbyname
-
Histórico: http://www.fug.com.br/historico/html/freebsd/
Sair da lista: https://www.fug.com.br/mailman/listinfo/freebsd


Re: [FUG-BR] RES: C/C++

2007-02-24 Por tôpico Thiago Costa
Em Domingo 25 Fevereiro 2007 00:58, gethostbyname escreveu:

 Mudando de assunto, vocês usando quais ferramentas para programação? Emacs?

 falou,
 gethostbyname


 -
 Histórico: http://www.fug.com.br/historico/html/freebsd/
 Sair da lista: https://www.fug.com.br/mailman/listinfo/freebsd

Eu costumava usar o Jed, muito bom mesmo. Hj em dia prefiro usar ferramentas 
gráficas como o KDevelop, que também é muito bom, o que realmente ajuda é o 
word-completation, que evita muitos erros de digitação no código. Mas se 
precisar editar um código em modo texto eu vou pelo VI mesmo que já estou 
acostumado a usa-lo para a maioria das coisas.

-- 
THIAGO DE SOUZA COSTA

e-mail: [EMAIL PROTECTED]
jid: [EMAIL PROTECTED]
fotolog: http://fotolog.com/thiagodk
-
Histórico: http://www.fug.com.br/historico/html/freebsd/
Sair da lista: https://www.fug.com.br/mailman/listinfo/freebsd


Re: [FUG-BR] RES: C/C++

2007-02-24 Por tôpico gethostbyname
Thiago Costa escreveu:

 Eu costumava usar o Jed, muito bom mesmo. Hj em dia prefiro usar ferramentas 
 gráficas como o KDevelop, que também é muito bom, o que realmente ajuda é o 
 word-completation, que evita muitos erros de digitação no código. Mas se 
 precisar editar um código em modo texto eu vou pelo VI mesmo que já estou 
 acostumado a usa-lo para a maioria das coisas.

   

Estou ansioso para ver o Anjuta 2.x estável. Eu tentei usar a versão
instável 2.0.2: demorei um tempo grande para compilar no FreeBSD, não
deu para usar porque realmente era muito instável, mas deu para perceber
que esse Anjuta 2.x vai ficar bonito.
Nunca me animei a usar o KDevelop. A disposição das ferramentas é muito
desorganizada e nas versões que experimentei, ele tentava forçar um
Qtzinho na gente.

gethostbyname
-
Histórico: http://www.fug.com.br/historico/html/freebsd/
Sair da lista: https://www.fug.com.br/mailman/listinfo/freebsd


Re: [FUG-BR] RES: C/C++

2007-02-24 Por tôpico Paulo Pires
On 2/25/07, gethostbyname [EMAIL PROTECTED] wrote:
 Foi mal pessoal. Estava alterando as configurações aqui.
 Acho que eu dupliquei duas mensagens e fazendo essa lambança também :-)
 Bom, não entendi muito bem sobre o que você quis dizer com a questão da
 composição visual e da outra arrumação.

Apenas que a composição do texto na norma, tanto na construção da
frase como na apresentação visual, torna difícil a interpretação do
que quer dizer.

 Os compiladores podem até aceitar outros retornos de main além de int,
 mas isso não é portável. Essa é a minha concepção.

Até concordo com você, mas é porque nós estamos acostumados com
máquinas e sistemas que trabalham com números.  Não precisaria ser o
caso.  Eu não se um CP/M da vida tinha alguma coisa como exit status
de um programa, nem tenho muita dificuldade em imaginar um sistema em
que um processo retornasse, ao invés de um mero valor, algo que
pudesse ser interpretado como um comando/ação ou um objeto mais
complexo.

 Estive pesquisando sobre o assunto agora e veja que engraçado:

   FYI, the first Google Usenet msg use of '*void main*' was in 1984:
   http://groups.google.com/group/net.lang.c/msg/644f6489bb23c5ab?hl=en

Assutador...  Se o PCC (Portable C Compiler, que se destinava a
encontrar potenciais problemas de portabilidade e encorajar um uso
elegante e pouco sujeito a problemas da linguagem, e serviu de base
para ferramentas como lint(1)) aceitava coisas como

struct A { int a, b, c; };

void f(struct A x){
printf(%d %d %d\n, x);
}

tenho até medo das outras coisas de que o carinha reclamava não
conseguir fazer.  Por mais que eu entenda que ainda não houvesse
padrão naquela época, acho o código acima perigosamente
implementation-dependent para o PCC deixar passar sem abrir o bico.

-- 
Um abraço.
Paulo A. P. Pires

... Qui habet aurem audiat quid Spiritus dicat ecclesiis.
-
Histórico: http://www.fug.com.br/historico/html/freebsd/
Sair da lista: https://www.fug.com.br/mailman/listinfo/freebsd


Re: [FUG-BR] RES: C/C++

2007-02-24 Por tôpico gethostbyname
Paulo Pires escreveu:
 On 2/25/07, gethostbyname [EMAIL PROTECTED] wrote:
   
 Foi mal pessoal. Estava alterando as configurações aqui.
 Acho que eu dupliquei duas mensagens e fazendo essa lambança também :-)
 Bom, não entendi muito bem sobre o que você quis dizer com a questão da
 composição visual e da outra arrumação.
 

 Apenas que a composição do texto na norma, tanto na construção da
 frase como na apresentação visual, torna difícil a interpretação do
 que quer dizer.
   
Compreendi. Foi um erro meu ter misturado o negrito no meio do código,
além de ter duplicado a mensagem.
   
 Os compiladores podem até aceitar outros retornos de main além de int,
 mas isso não é portável. Essa é a minha concepção.
 

 Até concordo com você, mas é porque nós estamos acostumados com
 máquinas e sistemas que trabalham com números.  Não precisaria ser o
 caso.  Eu não se um CP/M da vida tinha alguma coisa como exit status
 de um programa, nem tenho muita dificuldade em imaginar um sistema em
 que um processo retornasse, ao invés de um mero valor, algo que
 pudesse ser interpretado como um comando/ação ou um objeto mais
 complexo.
   
Esse objeto mais complexo ou comando poderia ser enviado ao OS por
outros modos, não? Chamar system, por exemplo. Seria mais prático e
simples, não? Imagine a main retornando algo que não seja o número, que
complicação isso geraria.
   
 Estive pesquisando sobre o assunto agora e veja que engraçado:

   FYI, the first Google Usenet msg use of '*void main*' was in 1984:
   http://groups.google.com/group/net.lang.c/msg/644f6489bb23c5ab?hl=en
 

 Assutador...  Se o PCC (Portable C Compiler, que se destinava a
 encontrar potenciais problemas de portabilidade e encorajar um uso
 elegante e pouco sujeito a problemas da linguagem, e serviu de base
 para ferramentas como lint(1)) aceitava coisas como

 struct A { int a, b, c; };

 void f(struct A x){
 printf(%d %d %d\n, x);
 }

 tenho até medo das outras coisas de que o carinha reclamava não
 conseguir fazer.  Por mais que eu entenda que ainda não houvesse
 padrão naquela época, acho o código acima perigosamente
 implementation-dependent para o PCC deixar passar sem abrir o bico.
   
hehehehe. Isso era em 1984!

gethostbyname
-
Histórico: http://www.fug.com.br/historico/html/freebsd/
Sair da lista: https://www.fug.com.br/mailman/listinfo/freebsd