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

Paulo Pires pappires em gmail.com
Domingo Fevereiro 25 00:57:04 BRT 2007


On 2/25/07, gethostbyname <gethostbyname at gmail.com> 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.


Mais detalhes sobre a lista de discussão freebsd