Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: AlbertoBSD en 13 Abril 2021, 19:24 pm



Título: #if 0 ¿Se ejecuta? (Resuelto)
Publicado por: AlbertoBSD en 13 Abril 2021, 19:24 pm
Código
  1. #if 0
  2. //Code
  3. #endif

Es mi duda, Se ejecuta o no se ejecuta el codigo, Lo comento por que estoy migrando parte de una funcion en programa a otro:

Linea 210 de https://github.com/JeanLucPons/BSGS/blob/master/BSGS.cpp

Código
  1. #if 0
  2.      pp.y.ModSub(&Gn[i].x,&pp.x);
  3.      pp.y.ModMulK1(&_s);
  4.      pp.y.ModSub(&Gn[i].y);           // ry = - p2.y - s*(ret.x-p2.x);  
  5. #endif

Hay varias partes del codigo asi, y mi pregunta es, si no se ocupan para que estan ahi? Si fueran referencia yo las hubiese comentado en lugar de poner ese if 0


Edit

Acabo de comprobarlo, No, no se ejecuta

Código
  1. #include<stdio.h>
  2.  
  3. int main(){
  4. int  i = 10;
  5. printf("%i\n",i);
  6. #if 0
  7. i = 200;
  8. #endif
  9. printf("%i\n",i);
  10. }

Código:
C:\codigos>testif.exe
10
10

¿Por que esta ahí entonces ese segmento de código?

Saludos!


Título: Re: #if 0 ¿Se ejecuta?
Publicado por: Eternal Idol en 13 Abril 2021, 19:44 pm
Para eventualmente cambiarlo por #if 1 y recompilar, no conozco otra razon.


Título: Re: #if 0 ¿Se ejecuta?
Publicado por: EdePC en 13 Abril 2021, 19:53 pm
Yo creo que debe ser para "distinguir" mejor esos "comentarios", o por facilidad de uso, dependiendo del editor de código puede ser más sencillo cambiar un caracter que seleccionar un conjunto de líneas y presionar cierta combinación de teclas para comentar/descomentar


Título: Re: #if 0 ¿Se ejecuta?
Publicado por: [D]aniel en 13 Abril 2021, 22:10 pm
Hola, no se ejecuta ese if justamente porque está comentado.

Las razones de porque está ahí pueden ser varias, puede ser porque el programador esté indicando algo, muchos programadores suelen dejar fragmentos de código como referencia de algo, inclusive algunos lo ponen para no olvidarse de que en esa línea se puede hacer alguna comparación, también puede ser por comunidad para el programador ya que debe haber estado haciendo pruebas y para no estar borrándolo simplemente lo deja ahí.

Es más ese if le puede servir como una ayuda de la pruebas que haga con el código y para saber que en esa línea/parte/función se puede hacer una comparación if, como también puede ser que esté ahí porque se lo haya olvidado de borrar.

Tal vez puede pasar que lo esté usando como un indicador de  que en ese mismo lugar debe insertar código que no existe en el código público y lo usa para las pruebas.


Saludos


Título: Re: #if 0 ¿Se ejecuta?
Publicado por: Serapis en 13 Abril 2021, 22:16 pm
Es una directiva condicional...
Sería más útil, añadir una constante en vez del 0... y aignar a la connstante el valor 0 o 1 según proceda.


Título: Re: #if 0 ¿Se ejecuta?
Publicado por: Eternal Idol en 13 Abril 2021, 22:24 pm
Hola, no se ejecuta ese if justamente porque está comentado.

No; no se compila ese codigo por la sencilla razon de que la expresion despues del #if es 0.

https://docs.microsoft.com/en-us/cpp/preprocessor/hash-if-hash-elif-hash-else-and-hash-endif-directives-c-cpp?view=msvc-160
https://en.cppreference.com/w/cpp/preprocessor/conditional


Título: Re: #if 0 ¿Se ejecuta?
Publicado por: AlbertoBSD en 13 Abril 2021, 22:47 pm
Para eventualmente cambiarlo por #if 1 y recompilar, no conozco otra razon.

Si, es lo mas seguro.

No; no se compila ese codigo por la sencilla razon de que la expresion despues del #if es 0.

Si ya veo, ni siquiera genera el codigo en el ejecutable, el compilador lo ignora totalmente.

Yo creo que debe ser para "distinguir" mejor esos "comentarios", o por facilidad de uso, dependiendo del editor de código puede ser más sencillo cambiar un caracter que seleccionar un conjunto de líneas y presionar cierta combinación de teclas para comentar/descomentar

Si es lo que también pensé.

Muchas gracias a todos.

Saludos!


Título: Re: #if 0 ¿Se ejecuta? (Resuelto)
Publicado por: Serapis en 13 Abril 2021, 23:00 pm
Como todas las directivas, que se compile o no y lo que se compile o no, depende de la propia directiva.
Las directivas, informan al compilador y ya el compilador valida lo que tenga que hacer con ella.

https://docs.microsoft.com/es-es/cpp/preprocessor/hash-if-hash-elif-hash-else-and-hash-endif-directives-c-cpp?view=msvc-160


Título: Re: #if 0 ¿Se ejecuta? (Resuelto)
Publicado por: [D]aniel en 13 Abril 2021, 23:45 pm
No; no se compila ese codigo por la sencilla razon de que la expresion despues del #if es 0.

https://docs.microsoft.com/en-us/cpp/preprocessor/hash-if-hash-elif-hash-else-and-hash-endif-directives-c-cpp?view=msvc-160
https://en.cppreference.com/w/cpp/preprocessor/conditional

Gracias por la aclaración, tal cual así es.


Un abrazo