哈,我以为这里是CB版,原来是Delphi。我上面说的不对。按照标准Pascal语法图,什么都不写就是一个空语句。分号是语句的分隔符。所以下面是合法的:    IF a=1 
       THEN
       ELSE
          ;这个THEN后面可以看成是一个空语句,ELSE后面可以看成是一个空语句加上一个分号作为IF语句与后面语句的分隔。

解决方案 »

  1.   

    我觉的如果象楼上这么干不行,因为delphi编译器的优化功能很强这样的语句因该不会被编译。这样因该可以
    asm
     nop
    end
      

  2.   

    如果你非要的话,我想这样可以:
    在程序中嵌入
    asm
      NOP;
    end;
      

  3.   

    用汇编固然可以,但总是不好看。要根据这个空语句的作用来决定其形式。虽然编译器会优化代码,但它不会优化掉有作用的代码。比如在IF/REPEAT等语句的条件表达式中有函数调用,而分支/循环体是空语句,函数调用仍然会被执行,这时的优化不会破坏程序的逻辑,而这个空语句也许是为了程序结构的清晰表达而有存在的必要。如果是为了延时,应该用下面的过程:
    procedure Delay(msecs:integer);var
    FirstTickCount:longint;beginFirstTickCount:=GetTickCount;
    repeat
    Application.ProcessMessages;
    until ((GetTickCount-FirstTickCount) >= Longint(msecs));end; 
    {来自:http://www.inprise.com.cn/support/delphi/delay.htm}
      

  4.   

    楼上这位请看
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        Button2: TButton;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;
      b:integer;
    implementation{$R *.DFM}procedure TForm1.Button1Click(Sender: TObject);
    var
    a :integer;
    begin
       if a = 1 then ;   end;// 反汇编   dec eax
    //          retprocedure TForm1.Button2Click(Sender: TObject);
    var
    a :integer;
    begin
        if a = 1 then b:=a;end;//反汇编   
    //cmp eax,$01
    //jnz TFom1.Button2Click + $ A
    //mov [b],eax
    //ret
    end.
      

  5.   

    if a = 1 then ;  有什么任何意义?难道不该让它消失?!
      

  6.   

    还有啊,可以这样写(标准PASCAL语法):
    begin
      if a = 1 then
    end;
      

  7.   

    在程序中使用空语句真正的意义几乎仅在于此:为了程序结构的清晰表达。我想到的2个例子:  在编写一段主程序时,如果你不去编写哑元过程,却需要在主程序中表达出有分支结构,便于以后扩充,这时候需要有空语句;  在使用一个单分支IF语句时,如果这个IF同其他的2分支IF有类比,还是为了提高程序结构的可读、可扩充,经常把这一个分支IF语句写成2分支,其中一个分支是“空语句”,这个空语句位置可以使源程序有“对称”,看起来我说远了,帖子的主人应该不是问这些。
      

  8.   

    空操作与Application.ProcessMessages、dec xxx这些可是两回事哟
    关键是看帖子的主人是想干什么用,某些用途下当然是可以替换的。
      

  9.   

    看不下去了,你用空语句是否想在编译完成的exe文件中加入一些信息?比如注册信息。
      

  10.   

    内嵌汇编
    asm
      nop
      nop 
      //...想写多少就写多少
      nop
    end;
    这应该是真正的空操作吧
      

  11.   

    这样最好,sleep(x);x是休息的时间,为微秒单位
      

  12.   

    我同意pdiy的猜测!这样的用途我感兴趣
      

  13.   

    强调:按照标准Pascal语法图,什么都不写就是一个空语句。分号是语句的分隔符。
      

  14.   

    在编译完成的exe文件中加入一些信息(比如注册信息) ,可以先定义数组,不一定要 asm nop。在这个位置可以写别的指令,但要写的精巧。如果在nop语句的位置写其他信息,程序运行到这里岂不是要出错?