Página 1 de 1

Raio_ do_ C_ precisa_ porque_?

MensagemEnviado: 07 Set 2008 20:14
por Djalma Toledo Rodrigues
Porque_o_raio_do_C_precisa_ do_raio_deste_Caracter_"_"_ ?

Eu_não_'Çabo' :lol:

MensagemEnviado: 07 Set 2008 22:17
por Maurício
Depende do contexto.

Quando o programa é compilado, eu não sei, mas, quando vc vai declarar variáveis que comecem com números, ele é obrigatório.

Eu só uso isso daí pra separar variáveis literais. Só isso.

[]'s

MensagemEnviado: 08 Set 2008 00:06
por msamsoniuk
bom, primeiro de tudo tem que diferenciar o que eh caractere reservado de caractere nao reservado. a linguagem C eh altamente simbologica, entao muitos caracteres sao reservados: parenteses, colchetes, chaves, operadores aritmeticos, logicos, etc.

em particular, os caracteres A-Z, a-z e _ nao sao reservados para nada. isso significa que vc pode usar eles livremente em nomes de funcoes e variaveis. em especial, nao existe nenhuma restricao quanto ao uso de _ no comeco, meio ou fim de um nome! como _ nao tem diferenca especial de qq outro caractere, usar _314 ou X314 para diferenciar do numero 314 dah absolutamente na mesma.

bom, isso eh a posicao oficial. agora tem a parte extra oficial que muda consideravelmente as coisas: a tradicao.

a linguagem C eh relativamente moderna, surgiu em minicomputadores. mas muitas outras linguagens anteriores surgiram na epoca do cartao perfurado, onde nao era possivel diferenciar maiusculas de minusculas. assim, adicionava-se _ para melhorar a legibilidade, de modo que ENDOFFILE tornava-se END_OF_FILE.

a linguagem C nao possui essa restricao, mas na decada de 70 a tradicao falou mais forte e a notacao tradicional end_of_file ou END_OF_FILE era muito mais popular do que EndOfFile.

outro ponto onde a tradicao pegou foi na linkagem: como era muito comum a colisao de simbolos do assembler com os simbolos da linguagem de alto nivel, adotou-se como pratica a adicao de _ na frente dos simbolos gerados pelo compilador. ateh hoje muitos compiladores adotam essa pratica e muitos sistemas operacionais impoe o uso dessa notacao. pelo mesmo motivo, usou-se a tradicao para evitar outras colisoes e hoje temos aberracoes estranhas como as diretivas __TIME__ e __DATE__, adicionadas ao pre-processador por algum fundamentalista do cartao perfurado.

eh claro que a tradicao nem sempre manda: o gcc por exemplo eh um compilador que nao adiciona _ na frente dos simbolos e isso facilita muito a vida. ao contrario do que se supoe, a colisao de simbolos entre codigo assembler e codigo compilado normalmente eh o que se deseja! e mesmo o unix, na decada de 70, nao adotou a forma tradicional de se escrever end of file: ao inves de EndOfFile, END_OF_FILE ou end_of_file, usou-se a enigmatica sigla EOF :)

MensagemEnviado: 08 Set 2008 00:43
por msamsoniuk
Djalma Toledo Rodrigues escreveu:Bem, mas quando C é compilado ele se transforma no Prog. Objeto , isto é, se transforma em Linguagem de Máquina. Não é ?


sim, mas os simbolos tem que continuar presentes, visto que todos os sistemas operacionais modernos usam linkagem dinamica. pior, se o resto do sistema usa _ na frente dos simbolos, ateh o compilador pascal vai ter que usar, senao ele nao consegue linkar dinamicamente recursos basicos do sistema operacional.

no linux, em particular, o numero de simbolos com _ eh bem pequena.

por exemplo:

root@darkstar:~# objdump -T /bin/ls | grep str
00000000 DF *UND* 00000167 GLIBC_2.0 strchr
00000000 DF *UND* 00000043 GLIBC_2.0 strcmp
00000000 DF *UND* 0000005d GLIBC_2.0 strftime
00000000 DF *UND* 000000af GLIBC_2.0 strlen
00000000 DF *UND* 0000005d GLIBC_2.0 __strtoull_internal
00000000 DF *UND* 0000015d GLIBC_2.1 strverscmp
00000000 DF *UND* 0000011f GLIBC_2.0 strncmp
00000000 DF *UND* 000001b9 GLIBC_2.0 strrchr
00000000 DF *UND* 0000004f GLIBC_2.0 strcoll
00000000 DF *UND* 000000b9 GLIBC_2.0 strncpy
00000000 DF *UND* 0000005d GLIBC_2.0 __strtoul_internal
00000000 DF *UND* 00000030 GLIBC_2.0 strcpy

tem dois pilantrinhas ali com __, mas supostamente nao fazem parte da API oficial... ao menos nunca ouvi falar neles, deve ser coisa do proex.

MensagemEnviado: 08 Set 2008 00:52
por Djalma Toledo Rodrigues
Entendi
Obrigado Mauricio
Obrigado Marcelo