Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Evitar este Warning (https://www.clubdelphi.com/foros/showthread.php?t=88127)

aguml 15-04-2015 19:27:40

Evitar este Warning
 
Hola amigos, tengo este condicional:
Código PHP:

if((Offset 0x00FFFFFF) == a

Tanto "Offset" como "a" son del tipo unsigned long.
Y el compilador me dice esto:
Cita:

[C++ Warning] TBruteForce.cpp(101): W8060 Possibly incorrect assignment
Funcionar funciona como yo quiero ya que solo entra cuando esa condicion se cumple pero queria saber porque me da ese Warning y como evitarlo.
Gracias.

ecfisa 15-04-2015 20:24:13

Hola aguml.

¿ Será ese el código causante ?, en el contexto que describes no me genera ninguna advertencia:



Saludos :)

aguml 15-04-2015 23:07:44

Ya di con el problema, era justo en otro condicional anterior. ¿No se puede hacer que builder muestre los numeros de linea?

aguml 16-04-2015 14:40:19

Ahora tengo otro Warning:
Cita:

[C++ Warning] Unit1.h(96): W8027 Functions containing switch are not expanded inline
Si miro a que se refiere veo que es a esto que tengo en el .h de la clase TForm1:
Código PHP:

protected:
   
BEGIN_MESSAGE_MAP
      VCL_MESSAGE_HANDLER
(WM_SYSCOMMANDTWMSysCommandOnWMSysCommand)
   
END_MESSAGE_MAP(TForm

¿se puede evitar o no pasa nada?

ecfisa 16-04-2015 15:39:24

Hola aguml.

Esa declaración tampoco me genera advertencia, pero no es realmente importante, no funcionará mál.

Sin embargo podrías probar si de este modo te la elimina:
Código PHP:

protected:
   
#pragma option push -w-inl 
   
BEGIN_MESSAGE_MAP
      VCL_MESSAGE_HANDLER
(WM_SYSCOMMANDTWMSysCommandOnWMSysCommand)
   
END_MESSAGE_MAP(TForm)
   
#pragma option pop 

Saludos :)

aguml 16-04-2015 16:34:21

Con eso se quita el warning ¿que hace eso exactamente? yo es que ni siquiera se para que es pragma :confused:

AgustinOrtu 16-04-2015 16:55:01

Revisa estos links

Error is " functions containing switch are not expanded inline

W8027: Functions containing 'statement' are not expanded inline

http://www.borlandtalk.com/w8027-fun...-vt108082.html

Basicamente el compilador te esta diciendo que no puede expandir la funcion, esto es, aprovechar cierta caracteristica que permite que una funcion, en lugar de compilarla una sola vez y cada vez que llamas a esa funcion, ir a ese unico lugar de todo tu programa en donde va a estar, se reemplazan las llamadas a la funcion esparcidas por tu codigo por la rutina de la funcion en si

No se entendio nada no?

Código Delphi [-]
unit FooUnit;

interface

  function Foo(x: integer): boolean; inline;

implementation
  function Foo(x: integer): boolean;
  begin
    Result := x > 10; 
  end;

Código Delphi [-]
unit Unit1;

interface

uses FooUnit;

interface
  function Bar: boolean;
  function Bar2: boolean;

implemetantion

  function Bar: boolean;
  begin
    Result := Foo(Random(5)); 
  end;

  function Bar2: boolean;
  begin
    Result := Foo(Random(8)); 
  end;

Al compilarlo esto se traduce en:

Código Delphi [-]
implemetantion

  function Bar: boolean;
  begin
    Result := Random(5) > 10; 
  end;

  function Bar: boolean;
  begin
    Result := Random(8) > 10; 
  end;


Esto evidentemente genera mas lineas de codigo, pero se gana performance ya que se evita el cambio de contexto que llamar a una funcion/procedimiento supone. Pero no siempre es posible, si la funcion es compleja o por ejemplo en un caso como el tuyo. Es una "sugerencia" al compilador (Ref)

ecfisa 16-04-2015 17:11:53

Hola aguml.
Cita:

Empezado por aguml (Mensaje 491411)
Con eso se quita el warning ¿que hace eso exactamente? yo es que ni siquiera se para que es pragma :confused:

En la primer línea desactivo las advertencias sobre inline y en la última las restauro.
Saludos :)

aguml 17-04-2015 07:06:12

Pues sigo sin enterarme de mucho pero tendré que intentar entenderlo porque parece algo importante. Sobre desactivar y activar las advertencias del inline, lo hago aquí porque me dices que está todo correcto pero no como estoy pez en temas de inline no lo haré en futuros códigos por motivos de integridad (no quiero que me explote el pc jajaja) ya que supongo que si desactivo eso y hago alguna barbaridad en esa zona, muy posible que pase cuando no se sabe bien lo que se hace, a saber que podría pasar jajaja.

AgustinOrtu 17-04-2015 07:43:28

El inlining es una optimizacion, nada mas


La franja horaria es GMT +2. Ahora son las 03:01:01.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi