条件预编译练习
条件编译绝对是一个好东西。如在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