2011年8月23日 星期二

讓程式碼的function內的component比較容易被抽換

讓程式碼的function內的component比較容易被抽換


當一個函式很大時,裡面包含許多component,為了程式碼容易看,
在程式中可以透過大括號把一個函式分成許多部分~

如以下的例子:

#include <stdio.h>

int
main (
)
{
  int y = 2;

  printf ("Hello, Y value is %d\n", y);

#ifdef FOMLOAD
{
  int x = 1;
  printf ("X value is %d\n", x);
  printf ("Y value is %d\n", y);
}
#endif //#ifndef FOMLOAD

//  printf ("X value is %d\n", x); // variable x does not exist in this scope

  return 0;
}


如此一來,被FOMLOAD包起來的程式碼,就可以依照FOMLOAD在Build Time的時候就決定要不要被執行~
這樣一來程式碼比較容易讀,在抽取的Component時,也比較容易。

另外,在上面的例子中,在大括號被宣告的int x變數,其能被存取的也只有在大括號中。

如此一來,更可以節省一些記憶體的空間。

另外,為了讓程式設計師比對有使用這一個方式跟沒有的差別。
以下是沒有使用這一個大括號的設計方式的程式碼;

#include <stdio.h>

int
main (
)
{
#ifndef FOMLOAD
  int x = 1;
#endif //#ifndef FOMLOAD
  int y = 2;

  printf ("Hello, Y value is %d\n", y);

#ifdef FOMLOAD
  printf ("X value is %d\n", x);
  printf ("Y value is %d\n", y);
#endif //#ifndef FOMLOAD

//  printf ("X value is %d\n", x); // variable x does not exist in this scope

  return 0;
}


如此一來,被FOMLOAD被分散在兩個地方,目前這一個例子的程式碼比較小,可能看不出差異,
當程式碼很大時,這兩個部分可能會被分散在好幾行之後(因為,宣告變數一定要在function的開頭)
這樣程式在可讀性上,就比較差。

Makefile
# Program, flags, etc.
CC = cl
CCFLAGS = /c
OBJ = WithCurelyBrace.obj
TARGET = WithCurelyBrace.exe

!IFDEF NOTSHOW
FLAGS =
!ELSE
FLAGS = /DFOMLOAD
!ENDIF

everything: $(TARGET)

clean:
[tab]del $(OBJ) $(TARGET)

all: clean everything

.c.obj:
[tab]$(CC) $(CCFLAGS) $< /Fo$@ $(FLAGS)

$(TARGET): $(OBJ)
[tab]$(CC) $(OBJ) /Fe$@


指令如下:
nmake all NOTSHOW=1
不會顯示括號內的指令

nmake all
會顯示括號內的指令

沒有留言: