网站首页 > 文章中心 > 其它

java中写c代码

作者:小编 更新时间:2023-08-16 12:43:09 浏览量:150人看过

如何用Java实现如下这段C代码,循环那里是重点

scanf类是判断输入的数值是否符合格式

while(true){//把while中的判断放到了while内部

Scanner sc = new Scanner(System.in);

int a = sc.nextInt();

int b = sc.nextInt();

if(a == null b == null)

System.out.print(a ◆ " " ◆ b);

else

return;

}

java代码生成器能生成c语言代码吗?用什么方法能实现呢?

按照我的理解,可以的,代码生成器是跨平台,而且是跨语言的(至少是跨文本语言的,UML暂时不好说,).

代码生成器作为一种开发工具,一般不直接作为程序的一部分,通常也不直接或间接(如通过AOP)被程序调用,他是通过编程的方式生成所需要的代码,然后将生成的代码作为源文件,复制到开发工具的代码区,然后进行编译.由于代码生成器是在编译之前运行的,所以呢它可以跨语言,你不但可以用代码生成器生成高级语言,也可以生成汇编语言,甚至机器码(0、1代码).

但编写代码生成器是一个难点,它需要你了解目标编程语言的语法.如果别人已经把你需要的代码生成器写好了,你只需按要求使用即可,此时就不需要了解目标编程语言的语法.

JNI是通过Java调用C语言(或其他语言,一般是C),它的实现机制与代码生成器不同(JNI是通过代码调用实现功能,而代码生成器是生成代码,复制代码进行使用),由于C是底层语言,一些底层操作单靠Java无法实现,所以才需要JNI.

好了,全部的我对代码生成器的个人理解,虽然提问时间已过了很久,但依然希望能对你及其他网友有所帮助.

写一段java代码,调用c程序,都有什么办法

JAVA以其跨平台的特性深受人们喜爱,而又正由于它的跨平台的目的,使得它和本地机器的各种内部联系变得很少,约束了它的功能.解决JAVA对本地操作的一种方法就是JNI.

JAVA通过JNI调用本地方法,而本地方法是以库文件的形式存放的(在WINDOWS平台上是DLL文件形式,在UNIX机器上是SO文件形式).通过调用本地的库文件的内部方法,使JAVA可以实现和本地机器的紧密联系,调用系统级的各接口方法.

简单介绍及应用如下:

第一段:JAVA中所需要做的工作

在JAVA程序中,首先需要在类中声明所调用的库名称,如下:

static

{

System.loadLibrary("goodluck");

今天这一节,库的扩展名字可以不用写出来,究竟是DLL还是SO,由系统自己判断.

还需要对将要调用的方法做本地声明,关键字为native.并且只需要声明,而不需要具体实现.如下:

public

native

void

set(int

i);

int

get();

然后编译该JAVA程序文件,生成CLASS,再用JAVAH命令,JNI就会生成C/C◆◆的头文件.

例如程序testdll.java,内容为:

class

testdll

main(String[]

args)

test

=

new

testdll();

test.set(10);

System.out.println(test.get());

用javac

testdll.java编译它,会生成testdll.class.

再用javah

testdll,则会在当前目录下生成testdll.h文件,这个文件需要被C/C◆◆程序调用来生成所需的库文件.

第二段:C/C◆◆中所需要做的工作

对于已生成的.h头文件,C/C◆◆所需要做的,就是把它的各个方法具体的实现.然后编译连接成库文件即可.再把库文件拷贝到JAVA程序的路径下面,就可以用JAVA调用C/C◆◆所实现的功能了.

接上例子.我们先看一下testdll.h文件的内容:

/*

DO

NOT

EDIT

THIS

FILE

-

it

is

machine

generated

*/

#include

jni.h

Header

for

#ifndef

_Included_testdll

#define

#ifdef

__cplusplus

extern

"C"

#endif

*

Class:

Method:

get

Signature:

()I

JNIEXPORT

jint

JNICALL

Java_testdll_get

(JNIEnv

*,

jclass);

set

(I)V

Java_testdll_set

jclass,

jint);

在具体实现的时候,我们只关心两个函数原型

这里JNIEXPORT和JNICALL都是JNI的关键字,表示此函数是要被JNI调用的.而jint是以JNI为中介使JAVA的int类型与本地的int沟通的一种类型,我们可以视而不见,就当做int使用.函数的名称是JAVA_再加上java程序的package路径再加函数名组成的.参数中,我们也只需要关心在JAVA程序中存在的参数,至于JNIEnv*和jclass我们一般没有必要去碰它.

好,下面我们用testdll.cpp文件具体实现这两个函数:

"testdll.h"

i

0;

jclass)

return

i;

j)

j;

编译连接成库文件,本例是在WINDOWS下做的,生成的是DLL文件.并且名称要与JAVA中需要调用的一致,这里就是goodluck.dll

把goodluck.dll拷贝到testdll.class的目录下,java

testdll运行它,就可以观察到结果了.

java如何内嵌c代码?

首选,直接内嵌是没法编译通过的.一般通过jni方式调用c或者c◆◆,或者c最后生成可移植性文件,通过java的api直接调用命令行.

Java如何调用C语言代码 ?

用Java可以写C语言编译器吗?

用java是可以写语言编译器的,用任何语言工具写都可以. 各语言开发工具间只有开发效率的差异,没有可行不可行的区别.

编译器其实就是一个翻译工具,它可以把代码直接翻译成二进制文件交给CPU执行(二进制指令就是CPU的指令集,当然可以直接操作内存),当然,这个二进制文件需要符合操作系统的可执行文件的格式(PE格式或ELF格式)才能执行.

换个角度理解:

linux gcc实际上就是一个工具集合,包含编译器,汇编器,连接器等

编译器就是把c语言程序翻译为一种叫做目标文件的中间表示形式,然后交给汇编器,翻译为汇编程序,而汇编执行直接对应二进制机器码,链接之后就可以变成可执行文件了.

而用java实现的编译器完全可以代替gcc工具集合中的编译器,生成相同的目标文件的中间表示形式,在交给gcc汇编器,连接器等处理.

以上就是土嘎嘎小编大虾米为大家整理的相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章