Como o compilador "interpreta" o código.

1. Como o compilador "interpreta" o código.

Vinicius Ferraço Arruda
Fawkes

(usa Ubuntu)

Enviado em 20/12/2013 - 19:07h

Olá, tenho uma dúvida pertinente, que realizei alguns testes e não consegui sanar.
Bom, eu gostaria de saber em qual ordem que o compilador "lê" a minha linha de código.
por exemplo:

vamos supor que eu tenha o seguinte trecho de código:

-------------

int N, M;
N = M = 0;

-------------

Neste caso, o compilador separaria uma parte(como é int, 4 bytes) da memória para N e para M, e depois na segunda linha(aí que vem a dúvida), de duas uma:

O compilador "lê" N iguala a "M" e iguala ambos à zero.

OU

O compilador "lê" o zero, coloca na memória de M, depois pega o valor de M, que é zero, e coloca na memória de N.

Ou seja, é da direita para a esquerda, ou da esquerda para a direita ?

Não sei se ficou claro a dúvida, mas em um teste que fiz:

--------------

int i=0; /*apenas declarei a variável i, e atribuí o valor zero à ela*/

printf("%d", i++); /*Imprime 0*/
printf("%d", i); /*Imprime 1*/

--------------


Pelo que entendi do código a cima, na segunda linha, o compilador parece(pelo que entendi)"ler" da esquerda para a direita, atribuindo ao tipo %d o valor de i, e após imprimir, o i é incrementado, pois na terceira linha ele é impresso como 1.

O trecho de código abaixo, inverte a posição do ++:

--------------

int i=0; /*apenas declarei a variável i, e atribuí o valor zero à ela*/

printf("%d", ++i); /*Imprime 1*/
printf("%d", i);

--------------


Já nesse caso, na segunda linha, (pelo que entendi) o compilador "lê" da esquerda para a direita, e ao ler o que será impresso (que fica após as aspas e a vírgula, como é nome desse espaço ?), ele primeiro "lê" os ++ e incrementa a variável a seguir que neste caso é o i, e após isso atribui ao %d para ser impresso.

Em fim, qual é a ordem de "leitura" do compilador ? Tive alguns professores que me disseram que o compilador "lê" da direita para a esquerda, a partir do ponto e vírgula(;), mas o compilador realmente possui uma ordem ? E se algo que eu disse a cima estiver errado me corrija por favor.

Grato !




  


2. Re: Como o compilador "interpreta" o código.

ian cléver sales fernandes
ianclever

(usa Arch Linux)

Enviado em 20/12/2013 - 19:17h

ele lê da esquerda para a direita.
no caso específico da atribuição de varias variáveis diretamente, ele vai ler até chegar ao 0, achou o valor que vc está querendo atribuir atribui aos 2, é o mesmo que se vc fizesse:

n=0;
m=0;


3. Re: Como o compilador "interpreta" o código.

Buckminster
Buckminster

(usa Debian)

Enviado em 20/12/2013 - 23:13h

Depende como foi construído o compilador.

A maioria dos compiladores atuais (incluíndo o GCC) lê das "isquerda para as dereita".

Porém você está se confundindo a si mesmo.

Ele primeiro lê a linha toda do comando até encontrar o símbolo que encerra ela (no caso abaixo o ';'),
e assim ele vai lendo e armazenando as informações do código (quando for o caso) até chegar no fim do código (ou de um bloco do código), para somente então executar.

int i=0; /*apenas declarei a variável i, e atribuí o valor zero à ela*/

printf("%d", i++); /*Imprime 0*/
printf("%d", i); /*Imprime 1*/


4. Re: Como o compilador "interpreta" o código.

ian cléver sales fernandes
ianclever

(usa Arch Linux)

Enviado em 21/12/2013 - 10:24h

bem lembrado. no caso dos contadores segue a seguinte lógica:


no caso do incremento estar do lado direito primeiro pega o valor e depois incrementa no caso:

int i=0;

printf("%d",i++);//aqui vai imprimir 0 na tela, e depois vai incrementar +1 a i;

ou

int x,i=0;

x=i++;//o x irá receber 0 e depois o i receberá +1


agora caso o contador esteja do lado esquerdo é o inverso:

int i=0;

printf("%d",++i);//aqui vai incrementar +1 a i e vai imprimir o resultado, no caso 1;

ou

int x,i=0;

x=++i;//o i irá incrementar +1 e x receberá o resultado, no caso 1;



5. Re: Como o compilador "interpreta" o código.

Matias
matiasalexsandro

(usa Fedora)

Enviado em 21/12/2013 - 13:32h

realmente boa escolha fazer parte dessa comunidade






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts