• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

bmosca

Incrementar uma constante, é possível?

26 mensagens neste tópico

Boas,

Tenho uma dúvida..

é assim, eu criei um array de estrutura com um #define MAX 300,

o que eu necessitava fazer era se fosse possível incrementar esse MAX 300 numa das partes do meu código, posso fazer isso?

e depois de incrementar, o programa passaria a reconhecer #define MAX 301 por expl..

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Isso não dá. E vai totalmente contra o propósito de macros...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Incrementar uma constante? Se a pudesses incrementar deixava de ser constante, não?  :) :)

Podes usar variáveis para fazer isso, mas atenção que ao alterares o valor da variável, se ela corresponder ao tamanho de um array, não estás a alterar o tamanho do array. Vais ter que alocar dinamicamente o array para conseguires fazer isso.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mas é que nem chega a ser constantes. É um macro, nem sequer existe durante o run-time.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

É possível... embora, como já foi dito, não faça muito sentido. Fazes

#undef MAX

#define MAX 301

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Convém alertar que estes #defines são interpretados pelo pré-processador, ou seja, não vale a pena fazeres algo do género:

if(x==1) {

  #undef MAX

  #define MAX 301

};

Porque isto limita-se a substituir todo o MAX que esteja abaixo por 301 em vez de ser por 300, e não todo o MAX que apareça em runtime depois do if.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Viva,

Registei-me no fórum, porque um colega do isel me passou esta pérola:

"Enviado por: TheDark

Inserir Citação

É possível... embora, como já foi dito, não faça muito sentido. Fazes

#undef MAX

#define MAX 301"

Quero responder directamente ao senhor que disse isto, que orgulhosamente diz que estuda/estudou no isel no curso de Engenharia Informática e Computadores.

A minha pergunta é simples, o senhor tem noção da barbaridade que acabou de dizer?

Primeiro um "#define" não é uma constante, para os menos informados. É usado frequentemente para esse efeito mas não é.

Segundo, o conceito de incrementar só faz sentido em "tempo de execução" e como já foi dito os "#defines" são interpretados pelo pré-processador. Assim o código que apresentou não tem o efeito de incrementar, mas sim de anular o define efectuado naquela linha de código e para todo o código depois no ficheiro vê o novo valor.

Sugiro que execute este código para ficar a perceber melhor:

"#include <stdio.h>

#define MAX 300

void teste()

{

#undef MAX

#define MAX 301

}

void main()

{

int i = MAX;

printf("%d", i);

xxx();

i = MAX;

printf("%d",i);

}"

O que o senhor espera é que no primeiro printf apareça 300 e no segundo 301, mas não é isso que acontece visto que o código do método main se encontra depois, no ficheiro, assim pré-processador quando vai substituir a "palavra" MAX pelo seu valor, já vê o novo valor de MAX.

Espero ter ajudado e espero que para a próxima o senhor TheDark que é moderador deste fórum e orgulhosamente exibe a faculdade em que estuda/estudou, tenha consciência que quando não se sabe não se deve falar. Eu como aluno do isel sinto-me envergonhado pelo seu comentário. Acho que devia ter mais consideração pela instituição em que estuda e devia defender isso, só dando a opinião quando realmente sabe do que está a falar.

Saudações

PS: Espero que este post não seja apagado pela moderação, não é minha intenção ofender ninguém, simplesmente estou a defender a instituição em que estudo, que tenho a certeza que não ensina coisas dessas!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

eish... que filme...

toda a gente se pode enganar uma vez ou outra... mesmo que andem no isel...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu como aluno do isel sinto-me envergonhado pelo seu comentário. Acho que devia ter mais consideração pela instituição em que estuda e devia defender isso, só dando a opinião quando realmente sabe do que está a falar.

Que cena... Toda a gente se engana independentemente da faculdade em que estude... Não é preciso mandar a casa abaixo. Sobretudo quando toda a informação que colocaste no post já tinha sido fornecida anteriormente.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Fazer uma festa destas tipo Sound Beach Party em Lagos, eish que *** de festa por causa de um post de um utilizador, que por acaso estuda no ISEL, ter conteúdo menos correcto, ainda que com a intenção de ajudar, é só mesmo para deitar foguetes. Ele enganou-se, provavelmente nem pensou bem na resposta que deu. Lá por estudar no ISEL, não quer dizer que lhe tenham ensinado aquilo lá. E o facto de ser moderador não quer dizer que ele é mais inteligente que os outros nem que sabe tudo, quer dizer que ele disponibiliza algum do seu tempo pessoal em função do fórum, para ajudar a comunidade a crescer. Vir agora fazer este alarido porque "ai o ISEL blablabla whiskas saquetas blablabla o ISEL blablabla, tenho vergonha etc" é perda de tempo. E também não percebi qual foi a intenção "do colega que te passou essa pérola". Devem andar todos em competição tipo os galos na capoeira para ver quem é que comete a 1ª gaffe geek, teriam sido todos mais honestos se tivessem falado pessoalmente com a pessoa em questão e o esclarecessem em vez de virem mandar bitaites e tentar e-humilhar um colega. Enfim, os cães ladram e a caravana passa.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu nem sei porque tanto alarido.

Eu leio o post dele como resposta a dizer que é possível redefinir MAX, mas que fazer isso não faz sentido nenhum.

No que diz está totalmente certo. Não estou a ver onde está o problema... é que nem vejo como um engano.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu nem sei porque tanto alarido.

Eu leio o post dele como resposta a dizer que é possível redefinir MAX, mas que fazer isso não faz sentido nenhum.

No que diz está totalmente certo. Não estou a ver onde está o problema... é que nem vejo como um engano.

Idem...

O único que devia ter vergonha em alguma coisa aqui é apenas uma pessoa, o MrMustaine...

E para além de vergonha devia ter um pouco mais de humildade nas respostas que dá. Mas obrigado, quando me encontrar com malta do ISEL (salvo excepções como o TheDark) já sei que são todos uns convencidos de primeira.

E para que conste MrMustaine, não acabaste de defender instituição nenhuma, acabaste foi de a manchar... ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

E para que conste MrMustaine, não acabaste de defender instituição nenhuma, acabaste foi de a manchar... ;)

Infelizmente é a mais pura verdade. São estas atitudes tristes que dão mau nome às coisas.

E peço desculpa por ter escrito no post acima que "toda a gente se engana" fazendo passar aquilo que o TheDark escreveu como um erro, que claramente não é. A única confusão está no OP que fala de constantes mas está na realidade a definir uma macro, e foi a isso que o TheDark respondeu.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A instituição cada vez mais é um aspecto secundário.

Hoje em dia quem der mais valor à instituição do que à pessoa em causa, habilita-se a fazer péssimas escolhas.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Respeito as vossas opiniões a 100%. Cada um está no direito de ter uma opinião diferente da minha.

Mas também não percebo porque salta tudo em defesa do TheDark se acham que o que ele disse não é um erro grave e se acham normal.

Mas eu sou de opinião contrária e sou livre de o ser :D. O tópico era sobre incrementar uma constante. É verdade que incrementar uma constante já é algo super exótico, mas para mim o senhor TheDark revelou com a resposta dele que não conhece o funcionamento das macros.

Não é nada de grave erra, não é e errar também é uma forma de aprender. Eu erro todos os dias se for preciso até em público, não tem mal nenhum nisso. NOTEM: O que tem mal é uma pessoa que se apresenta a defender "as cores" do seu curso, tem que o defender em condições senão só mancha.

Já viram o que é eu dizer: "O meu curso é espectacular, eles ensinam-nos como em mais nenhuma faculdade ensinam". E logo a seguir mando uma calinada. Mais do que ser eu a perder a credibilidade é o meu curso que perde. Percebem?

Este é o meu ponto de vista e foi com este intuito que dei aquela chicotada na consciência do senhor TheDark.

Cumprimentos.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não vi nenhum erro por parte do TheDark. O que ele disse faz sentido.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

@MrMustaine

Quanto mais falas, mais te enterras...

Já viram o que é eu dizer: "O meu curso é espectacular, eles ensinam-nos como em mais nenhuma faculdade ensinam". E logo a seguir mando uma calinada. Mais do que ser eu a perder a credibilidade é o meu curso que perde. Percebem?

Preocupa-te mais contigo do que com a instituição que estudas, FYI, isso não interessa para nada...

O facto de "o teu curso ser espectacular e eles ensinarem o que mais ninguém ensina" (lol), não significa que tu tenhas de perceber e saber fazer tudo. Quem perde credibilidade se TU mandares uma calinada, apenas tu perdes a credibilidade, não é o curso nem a instituição...

E ninguém está a defender o TheDark, tu é que estas a ter uma uma atitude lamentável e a por a tua instituição/curso a tua frente, quando deveria ser ao contrário, mas tu lá sabes...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O meu curso é espectacular, eles ensinam-nos como em mais nenhuma faculdade ensinam.

Não sejas ridículo. O TheDark não disse isso nem ninguém diz isso. O TheDark respondeu à pergunta no tópico que era sobre macros e não constantes. Já tinha sido explicado anteriormente ao OP que ele não estava a usar constantes mas sim macros.

Estamos a saltar em defesa do TheDark porque aquilo que ele escreveu ser passado (fora de contexto) por mail entre os colegas da própria faculdade e vires cá tu fazer um post a criticá-lo e a dizer que o nome da instituição de ensino em que andas está a ser atacado por causa do que ele escreveu é muito triste.

Se tens complexos de inferioridade, ultrapassa-os, porque como já aqui disse, tu é que estás a dar mau nome à tua instituição. Eu, se andasse no secundário, não queria ir para uma faculdade em que o pessoal vem dizer mal dos colegas num fórum de programação, ainda para mais sem justificação.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Para quem não percebeu isto era um exemplo:

" Já viram o que é eu dizer: "O meu curso é espectacular, eles ensinam-nos como em mais nenhuma faculdade ensinam". E logo a seguir mando uma calinada. Mais do que ser eu a perder a credibilidade é o meu curso que perde. Percebem? "

Só para deixar claro:

- Ninguém disse que foi passado por mail;

- O tópico é sobre constantes e o TheDark disse que era possível incrementar fazendo undefine e define, apesar de não fazer sentido. Com isto deu a entender, a mim e às ao colega que me mostrou isto que ele não percebia claramente o que estava a dizer;

- Ninguém anda aqui a gozar com o TheDark, nem sei quem é e nem quero saber.

E digam o que disserem, a menos que eu não perceba nada de português foi dado a entender ao OP, que é possível fazer o que ele quer mas não faz sentido incrementar constantes.

Eu não estou a dar mau nome à minha instituição, nem bom. Ficou foi a sensação que eu sou um gajo super convencido e mau carácter que gosta de gozar com as calinadas dos outros.

Mas isso é porque é isso que voçês querem ver e nada vou fazer para mudar a vossa opinião, porque nem me interessa, eu queria passar uma mensagem, agora se pensam que eu sou um canalha ou não é-me completamente indiferente.

Um bom entender de português percebe que fui um bocadinho longe na forma e no local em que dei a chicotada, mas percebe onde queria chegar. Não ia concordar com os meus meios, mas ia concordar com a mensagem.

E aqui o que se passou é que todos ignoraram a mensagem.

Façam o seguinte raciocínio, se vissem uma apresentação sobre um tema xpto dum professor da instituição A e ele se tivesse enganado a meio da apresentação dizendo algo claramente errado.

Quem ia ficar mal visto? O professor? A instituição? Ambos?

Obviamente ambos, mas eu ia pensar duas vezes antes de recomendar a instituição xpto, sabendo que admitem professores que não sabem do que estão a falar.

Não vou alimentar mais esta discussão.

Espero apenas que o OP, que é o mais importante, tenha saído daqui com uma resposta e até tenha percebido melhor o que está a usar, que não são simplesmente constantes.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Espero apenas que o OP, que é o mais importante, tenha saído daqui com uma resposta e até tenha percebido melhor o que está a usar, que não são simplesmente constantes.

A única justificação para uma resposta neste tópico era acrescentar informação relevante para o OP que ainda não tivesse sido veiculada. Não consigo encontrar nada no teu primeiro post que não tivesse sido de uma forma ou de outra explicado anteriormente.

Quem ia ficar mal visto? O professor? A instituição? Ambos?

Obviamente ambos, mas eu ia pensar duas vezes antes de recomendar a instituição xpto, sabendo que admitem professores que não sabem do que estão a falar.

Um aluno e um professor de uma instituição são coisas muito diferentes. Os professores têm que ter um certo nível, os alunos há-os melhores e piores, em todas.

Eu não estou a dar mau nome à minha instituição, nem bom. Ficou foi a sensação que eu sou um gajo super convencido e mau carácter que gosta de gozar com as calinadas dos outros.

Tu és responsável pelo teu nome não é a tua instituição que faz aquilo que tu és, e não tens que dar sermões a ninguém quer seja do teu curso ou não, por isso a tua atitude de extrema indignação seria injustificada mesmo que ele tivesse cometido um erro enorme. Não é o caso, não foi cometido qualquer erro e uma leitura antecipada do tópico ter-te-ia permitido perceber isso. Pelos vistos ainda não conseguiste digerir essa informação. Admite os teus erros, isso sim mostra algum valor.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

só não consigo é perceber como é que o facto de alguem dizer algo menos certo num forum pode dar uma má imagem da instituição que tem na assinatura...

se visse uma apresentação de um prof de uma universidade qualquer e onde ele cometesse um erro grave, aí talvez o professor e mesmo a própria instituição poderiam ficar mal vistos, mas aí estamos a falar de um profissional e que como tal tem responsabilidades sobre o que diz...

num forum como este, quem tira duvidas, tira-as, simplesmente, por boa vontade, ninguem tem nada a ganhar com isso... ás vezes a gente engana-se, mas só se engana quem perde tempo a responder e a ajudar quem precisa. quando alguem ve que outra pessoa se enganou pode e deve corrigir esse erro, mas não passa a ter o direito de responsabilizar ninguem de denegrir a imagem de um curso qualquer, isso é ridiculo...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
" Já viram o que é eu dizer: "O meu curso é espectacular, eles ensinam-nos como em mais nenhuma faculdade ensinam". E logo a seguir mando uma calinada. Mais do que ser eu a perder a credibilidade é o meu curso que perde. Percebem? "

Mas onde é que ele disse que ensinam como em nenhuma outra faculdade?! Lês coisas onde elas não existem, aliás, QUERES ler coisas onde elas não existem. O que o TheDark tem na assinatura é "LEIC@ISEL - Mais que um curso, uma forma de vida". Isto tem alguma coisa a ver com o que tu disseste? Isto é uma frase típica de espírito académico, mais nada! Chegas a ser ridículo com esse pseudo-fanatismo. A esta hora a tua instituição já anda pelas ruas da amargura, porque os alunos do 1º ano do ISEL também podem gostar de andar lá e fartam-se de fazer asneiradas em código, ou vais-me dizer que são todos muito inteligentes e que nunca se enganaram? E o TheDark está aqui a representar alguma instituição? Tem algum selo espetado na testa a dizer "Estou a representar o ISEL no P@P"? Se ele gosta de andar no ISEL que o diga, o que é que isso tem a ver com os posts dele? Nada. Ele está aqui voluntariamente para ajudar e contribuir, não está aqui para se vangloriar do que quer que seja. Se pensas que chegas a algum lado com essa treta do "Eu sou do ISEL, lá ensinam como em nenhuma faculdade" estás bem enganado, ainda tens de comer muita sopinha.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Está sempre a tempo de começar a dar umas ajudas a quem precisa, em vez de criticar.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mas também não percebo porque salta tudo em defesa do TheDark se acham que o que ele disse não é um erro grave e se acham normal.

Mas eu sou de opinião contrária e sou livre de o ser :D. O tópico era sobre incrementar uma constante. É verdade que incrementar uma constante já é algo super exótico, mas para mim o senhor TheDark revelou com a resposta dele que não conhece o funcionamento das macros.

Eu ainda não percebi onde é que ele errou.

Ele disse:

É possível... embora, como já foi dito, não faça muito sentido. Fazes

#undef MAX

#define MAX 301

O que de facto tu depois corroboraste com o exemplo que deste.

#include <stdio.h>

#define MAX 300

void teste()

{

  #undef MAX

  #define MAX 301

}

void main()

{

  int i = MAX;

  printf("%d", i);

  xxx();

  i = MAX;

  printf("%d",i);

}

A meu ver, o único erro dele (se é que se possa chamar de erro) é ele ter sido breve. Podia ter acrescentado alguma informação sobre como funciona as macros no C visto que o OP não percebe muito do assunto.

Em relação ao local de ensino, acho que nem vale a pena entrar por esse caminho.

PS: E isto já está  a começar a descambar. A discussão já não tem nada haver com a dúvida original. Fazer uns moves dos posts talvez...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

boas!

obrigado a todos por me responderem, eu não sei o que se passa, não recebi mails nenhuns a avisar que me tinham respondido  :P

tenho de ver as definições da minha conta.

Quanto à minha dúvida, não adivinhava que desse tanto que falar, mas pronto, realmente têm razão, incrementar uma constante, deixa de ser uma constante, por isso, tive de pensar n'outra estratégia para a resolução do problema.

Obrigado a todos!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora