條件預編譯練習
條件編譯絕對是一個好東西。如在C或Cpp中,可以通過預處理語句來實現條件編譯。代碼如下:
#IFDEF DEBUG#UNDEF DEBUG#ENDIF #define DEBUG #IFDEF DEBUUG /* code block 1 */#ELSE /* code block 2 */#ENDIF
但是在JAVA中卻沒有預處理,宏定義這些東西,而有時我們可能需要條件編譯。那麼,在JAVA中,該如何實現條件編譯呢?
我們來看一個例子。
編寫一個helloworld程序。代碼如下:
public class Hello { public static void main(String[] args) { System.out.println("Hello, world!"); }}
保存為Hello.java並編譯,得到一個class文件,並且觀察到文件大小是417位元組。然後我們對這個文件進行反編譯,用jd-gui。得到代碼如下:
import java.io.PrintStream;public class Hello { public static void main(String[] paramArrayOfString) { System.out.println("Hello, world!"); }}
得到這個有什麼用呢?
現在我們再來對源代碼進行修改,修改後的代碼如下。
public class Hello { public static void main(String[] args) { if(false) { System.out.println("Hello, world!"); } }}
進行編譯,這時我們再看它的大小,只有255位元組。怎樣?想到什麼了吧?沒錯,編譯器會對代碼進行優化,對於條件永遠為false的語句,JAVA編譯器將不會對其生成位元組碼。
② c語言中條件編譯的實例
條件編譯命令最常見的形式為:
#ifdef 標識符
程序段1
#else
程序段2
#endif
它的作用是:當標識符已經被定義過(一般是用#define命令定義),則對程序段1進行編譯,否則編譯程序段2。
其中#else部分也可以沒有,即:
#ifdef
程序段1
#endif
這里的「程序段」可以是語句組,也可以是命令行。這種條件編譯可以提高C源程序的通用性。如果一個C源程序在不同計算機系統上系統上運行,而不同的計算機又有一定的差異。例如,我們有一個數據類型,在Windows平台中,應該使用long類型表示,而在其他平台應該使用float表示,這樣往往需要對源程序作必要的修改,這就降低了程序的通用性。
③ 條件編譯,ifdef條件,ifndef條件的區別是什麼
一般情況下,源程序中所有行都參加編譯。但是有時希望程序中一部分內容只在滿足一定條件是才進行編譯,也就是對這一部分內容指定編譯的條件,也就出現了條件編譯.
#ifdef 和 #ifndef 用法及意義其實跟判斷語句if是一樣的
但使用if語句目標程序長,因為所有語句都要進行編譯,運行時間長,因為運行時要對if語句進行測試
,而採用條件編譯,就可以減少編譯語句,從而減少目標程序的長度,減少運行時間。
④ 條件編譯有哪幾種形式
#if NNN
statement1;
#elif MMM
statement2;
#else
statement3;
#endif
http://ke..com/view/1995627.htm
⑤ 條件編譯問題
if語句是確定要編譯的內容,在運行時判斷,比如:
if(a>b)
printf("A大於B");
else
printf("A小於B");
條件編譯可不是在運行階段執行的,是為了某種需要(特別是跨平台的需要),只在編譯器掃描源代碼時,確定用哪一部分。
舉個例子,比如,一般LINUX多線程程序叫做pthread_create,而WINDOWS啟動多線程的程序是CreateThread,為了保證同一個程序可以跨平台運行,我們這樣書寫程序:
#ifdef WIN32 //如果是WINDOWS系統
#include <windows.h>
#define THREAD CreateThread
#else //如果是LINUX系統
#include <pthread.h>
#define THREAD pthread_create
#endif
⑥ 資料庫預編譯語句in(查詢條件),如果查詢條件只有一個,可以運行,如果多個條件,則不能運行,為什麼
你這個是把usercode的值作為變數給了語句里的?
這時候就有個問題
你的userCode是string類型的數組吧。。。
那麼傳進去的應該是'10086','10087'
如果不是這個問題你就在執行SQL語句之前先輸出一下語句 日誌里看看是哪裡格式不對了
⑦ C語言預編譯,條件編譯問題
不可以。條件編譯的條件必須是在程序運行之前就知道值的,這樣才能把你的代碼根據情況編譯為不同的程序。這里的函數參數在運行前不知道值,因此無法使用條件編譯。
⑧ 什麼條件下使用條件預編譯
使用這個東西的話,只要你想使用這個東西就可以使用了,這個的話倒是沒有什麼特別的限制的
⑨ 一道c語言試題(條件編譯)
你想一下 在宏替換之後程序變為
#include <stdio.h>
void main()
{
int a[5],m,*p=a;
while(p<a+N)
scanf("%d",p++);
p=a;
#if YES==NO
m=*p;
while(++p<a+5) {if(m<*p) m=*p;}
printf(" max=%d\n",m);
#else
m=*p;
while(++p<a+N) {if(m>*p) m=*p;}
printf(" min=%d\n ",m);
#endif
}
這里的YES==NO是什麼意思? 你見過這樣的表達式么?
給你修改一下,這樣就是求最小值了
#define N 5
#define YES 1
#define NO 0
#define DEBUG YES
#include <stdio.h>
void main()
{
int a[N],m,*p=a;
while(p<a+N)
scanf("%d",p++);
p=a;
#if DEBUG==NO
m=*p;
while(++p<a+N) {if(m<*p) m=*p;}
printf(" max=%d\n",m);
#else
m=*p;
while(++p<a+N) {if(m>*p) m=*p;}
printf(" min=%d\n ",m);
#endif
}
⑩ 如何實現條件編譯
插入預編譯宏命令,例如:
// 宏 條件
#ifdef __APPLE__
// 這里編譯 蘋果 的
#else
// 這里編譯 其它 的
#endif