2008年9月24日 星期三

利用程式碼註解來達成 #if #else #endif 的效果

下面這段 C 語言的程式碼
#include <stdio.h>

int main()
{
    //*/
    printf("If\n");
    /*/
    printf("Else\n");
    //*/
    return 0;
}
效果相當於
#include <stdio.h>

int main()
{
#if 1
    printf("If\n");
#else
    printf("Else\n");
#endif
    return 0;
}
如果把第一個註解改成 /*/ 後
#include <stdio.h>

int main()
{
    /*/
    printf("If\n");
    /*/
    printf("Else\n");
    //*/
    return 0;
}
效果就相當於
#include <stdio.h>

int main()
{
#if 0
    printf("If\n");
#else
    printf("Else\n");
#endif
    return 0;
}
這個小技巧也可以應用在其他可以使用 // /**/ 當作註解的程式語言

像是 Java 沒有 macro 可以使用,遇到 JNI 這類的東西,系統上就一定要安裝相關的 native library 才可以使用 JNI,如果在 JNI 上面加上一層空殼再搭配這樣的技巧就可以快速地在 native function 與 pseudo function 之間切換。

改寫之前寫過的 JNI - Java Native Interface
class HelloWorld
{
    // If '/*/' use native, '//*/' use pseudo.
    //*/
    public int[][] multiply(int A[][], int B[][]) { return null; }
    /*/
    public native int[][] multiply(int A[][], int B[][]);
    static
    {
        System.loadLibrary("HelloWorldImp");
    }
    //*/

    public static void main(String[] args)
    {
        HelloWorld test = new HelloWorld();
        int[][] A = new int[5][5];
        int[][] B = new int[5][5];
        int[][] result = test.multiply(A, B);
        System.out.println(result[0][0]);
    }
}
如果只是要開發一些跟 JNI 功能無關的 Java 程式部份,又不想要安裝或是無法安裝那些相依的 native library 的時候就很方便了。 ^o^
張貼留言