/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

Duda con esta macro

 
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
cigoba



Registrado: 27 Ago 2007
Mensajes: 39

MensajePublicado: 20/09/2007 8:22 pm
Título: Duda con esta macro

Hola a todos
Alguien podría decirme cual de estas formas es la más conveniente de definir una macro:

Macro sin ';' al final:
Código:

#include <stdio.h>
#include <stdlib.h>

#define ENTRADA scanf("%d", &valor)
int main(void)
{
    int valor;
    printf("Ingresa el valor: ");
    ENTRADA;
    printf("El valor es: %d\n", valor);
    system("PAUSE");
    return 0;
}

Macro con el ';' al final:
Código:
#define ENTRADA scanf("%d", &valor);

Macro con el ';' al final y la sentencia encerrada entre llaves:

Código:
#define ENTRADA { scanf("%d", &valor); }


Bueno esa es la duda que tengo. Gracias.
Saludos
_________________
esta es mi firma.
Volver arriba
cheroky



Registrado: 22 Sep 2005
Mensajes: 1372
Ubicación: En ecx esperando un call

MensajePublicado: 20/09/2007 11:52 pm
Título:

La macro que pretendes usar no aclara nada el codigo por que oculta una llamada a funcion con paso de argumentos en tiempo de ejecucion y eso es peligroso.

La macro correcta seria algo asi:
Código:
#define ENTRADA scanf("%d", &(valor))

sin el ';' final ya que el identificador ENTRADA debe llevarlo fuera de la expansion y no ocultarlo, y las futuras variables entre parentesis.

S2.
_________________
- Explícito es mejor que implícito.
- Simple es mejor que complejo.
- Complejo es mejor que complicado.
- Plano es mejor que anidado.
- Ralo es mejor que denso.
Volver arriba
rir3760



Registrado: 01 Oct 2004
Mensajes: 3657
Ubicación: Mexico

MensajePublicado: 21/09/2007 7:44 am
Título:

En esta misma linea, en algunas ocasiones se llega a ver codigo fuente donde se sustituye el uso de funciones muy utilizadas por el uso de macros en la forma:
Código:
#define p printf
#define s scanf

/* ... */

p("Introduce un numero: ");
s("%d", &algun_numero);

/* ... */


Si bien esto reduce el numero de caracteres a teclear se considera codigo ofuscado ya que no hace el codigo mas legible como tampoco mas eficiente.

Un saludo
_________________
The capacity to learn is a gift;
The ability to learn is a skill;
The willingness to learn is a choice.
--
Rebec of Ginaz
Volver arriba
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com