当前位置: 首页 > wzjs >正文

租房网站建设多少钱网站域名在哪看

租房网站建设多少钱,网站域名在哪看,网络电商平台有哪些,江西电信网站备案java import和c include区别 AI回答 Java中的import关键字和C语言中的#include预处理指令在功能和用途上有显著的区别。以下是它们之间的一些主要差异: ‌作用机制‌: ‌Java import‌:import关键字用于从其他包或类中导入类型(如…

java import和c include区别 AI回答

Java中的import关键字和C语言中的#include预处理指令在功能和用途上有显著的区别。以下是它们之间的一些主要差异:

  1. 作用机制‌:

    • Java import‌:import关键字用于从其他包或类中导入类型(如类、接口、枚举和注释),以便在当前文件中使用这些类型时不需要使用它们的完全限定名(包名和类名)。import语句只是指示编译器在编译时到哪里查找这些类型,它并不会将导入的包或类的内容复制到当前文件中。因此,即使导入了多个包或类,也不会增加编译后文件的大小。
    • C #include‌:#include预处理指令用于将指定文件的内容插入到当前源文件中。这个被包含的文件通常是一个头文件(.h),它包含了函数声明、宏定义、类型定义等。预处理器会在编译之前执行#include指令,将头文件的内容复制到当前源文件中。如果包含了多个头文件,且这些头文件中有重复的内容,那么这些重复的内容会被多次复制到当前源文件中,从而可能导致编译后的文件变大。
  2. 编译时行为‌:

    • Java import‌:Java编译器在编译时解析import语句,并根据需要查找和加载相应的类文件(.class)。只有当实际使用到某个类时,编译器才会加载该类的字节码。这种加载方式称为动态加载或按需加载。
    • C #include‌:#include指令在编译之前由预处理器执行,它实际上是将头文件的内容复制到当前源文件中。因此,在编译时,编译器看到的是已经包含了头文件内容的源文件。如果头文件中有语法错误或依赖关系问题,这些问题会在编译时被发现。
  3. 语法和使用‌:

    • Java import‌:import语句的语法是import PackageName.ClassName;或者import PackageName.*;(导入整个包)。使用import可以提高代码的可读性,减少命名冲突,并在一定程度上提高性能(因为编译器可以在编译时验证类型)。
    • C #include‌:#include指令的语法是#include <header_file>(用于包含标准库头文件)或#include "header_file"(用于包含用户自定义的头文件)。使用双引号时,编译器会先在当前源文件所在目录下查找头文件,如果找不到再到系统标准库目录下查找。
  4. 依赖关系处理‌:

    • Java‌:Java通过包和类来管理依赖关系,并使用类加载器在运行时加载类。这提供了更灵活的依赖管理和动态加载能力。
    • C‌:C语言通过头文件来管理依赖关系,但这种方式相对静态,且容易导致循环依赖问题。C语言没有内建的依赖管理工具,通常依赖开发者手动管理头文件包含顺序和依赖关系。

综上所述,Java的import和C的#include在作用机制、编译时行为、语法和使用以及依赖关系处理等方面都存在显著的差异。这些差异反映了Java和C语言在设计哲学、编译模型和依赖管理方式上的不同。

java编译示例

demo3源码

package demo3;import demo4.Demo4;/*** @author yaoct* @date 2023/12/21 16:17* @description:*/
public class Demo3 {public static String method3(){System.out.println("demo3");return "mothod3";}public static void main(String[] args) {Demo4.method4();}
}

demo4源码

package demo4;import demo3.Demo3;/*** @author yaoct* @date 2025/2/24 13:49* @description:*/
public class Demo4 {public static void method4(){System.out.println("demo4"+ Demo3.method3());}
}

demo5源码

package demo5;/*** @author yaoct* @date 2025/2/24 14:24* @description:*/
public class Demo5 {public static void method5(){int v=1;}
}

目录结构

可知demo4.Demo3.java与demo4.Demo4.java互相依赖,(以下省略包名)

如果只编译Demo3.java

javac -d out demo3\Demo3.java

同时生成Demo3.class和Demo4.class

虽然初始不存在Demo4.class,由于Demo3.java依赖Demo4.java,会在编译Demo3.java时,同时编译Demo4.java。可知javac命令编译支持源码循环依赖。而Demo5.java不便宜。

可以使用以下命令编译多个包下的源码

javac demo3\Demo3.java demo4\Demo4.java demo5\Demo5.java

运行时如果依赖的class文件不在当前工作目录,需要添加classpath路径

如果将demo4.Demo4.class移动到E盘,执行需以下命令,其中多个类路径用;风格

java -cp .;E:\ demo3.Demo3

c语言编译示例 

123.c源码

#include "demo1.h"
#include <stdio.h>
#include <stdlib.h>
int accum1 = 1;
int accum2;
extern int accum3;int sum1(int x, int y)
{
int t = x + y + accum1 + accum3;return t;
}
int main(int argc,char *agrv[])
{
printf("value:%d",sum2(1,2));
return 1;
}int sum2(int x, int y)
{
return sum1(x,y)+method1(333);
}void fun1()
{int n = 10;int *arr = (int*)malloc(n * sizeof(int)); // 分配一个可以存储10个整数的数组if (arr == NULL) {printf("Memory allocation failed\n");}// 使用arr...free(arr); // 使用完毕后释放内存
}

demo1.h源码

int method1(int x);

demo111.c源码

#include "demo1.h"
int method1(int x)
{
return x;
}

因为c语言的预处理需要将#include指令包含的文件 全量导入。所有需要

  • 使用前向声明‌:在头文件中只声明(而不定义)函数或变量,将定义放在源文件中。这样,即使头文件被多次包含,也不会导致重复定义的问题。
  • 使用头文件保护‌:在每个头文件的开头使用预处理指令(如#ifndef#define#endif)来防止头文件被多次包含。

gcc工具包含了编译器、汇编器、链接器等一系列工具,以下是通过命令单步执行。

预处理
gcc -E 123.c -o 123.i

得到123.i的预处理文件

这个文件内容较多,这里不展示,除了包含123.c源码之外,还包含了库函数stdio.h,stdlib.h与demo1.h的头文件

在执行编译指令生成汇编语言

编译
gcc -S 123.i

得到汇编代码

	.file	"123.c".globl	accum1.data.align 4.type	accum1, @object.size	accum1, 4
accum1:.long	1.comm	accum2,4,4.text.globl	sum1.type	sum1, @function
sum1:
.LFB2:.cfi_startprocpushq	%rbp.cfi_def_cfa_offset 16.cfi_offset 6, -16movq	%rsp, %rbp.cfi_def_cfa_register 6movl	%edi, -20(%rbp)movl	%esi, -24(%rbp)movl	-24(%rbp), %eaxmovl	-20(%rbp), %edxaddl	%eax, %edxmovl	accum1(%rip), %eaxaddl	%eax, %edxmovl	accum3(%rip), %eaxaddl	%edx, %eaxmovl	%eax, -4(%rbp)movl	-4(%rbp), %eaxpopq	%rbp.cfi_def_cfa 7, 8ret.cfi_endproc
.LFE2:.size	sum1, .-sum1.section	.rodata
.LC0:.string	"value:%d".text.globl	main.type	main, @function
main:
.LFB3:.cfi_startprocpushq	%rbp.cfi_def_cfa_offset 16.cfi_offset 6, -16movq	%rsp, %rbp.cfi_def_cfa_register 6subq	$16, %rspmovl	%edi, -4(%rbp)movq	%rsi, -16(%rbp)movl	$2, %esimovl	$1, %edimovl	$0, %eaxcall	sum2movl	%eax, %esimovl	$.LC0, %edimovl	$0, %eaxcall	printfmovl	$1, %eaxleave.cfi_def_cfa 7, 8ret.cfi_endproc
.LFE3:.size	main, .-main.globl	sum2.type	sum2, @function
sum2:
.LFB4:.cfi_startprocpushq	%rbp.cfi_def_cfa_offset 16.cfi_offset 6, -16movq	%rsp, %rbp.cfi_def_cfa_register 6pushq	%rbxsubq	$24, %rsp.cfi_offset 3, -24movl	%edi, -20(%rbp)movl	%esi, -24(%rbp)movl	-24(%rbp), %edxmovl	-20(%rbp), %eaxmovl	%edx, %esimovl	%eax, %edicall	sum1movl	%eax, %ebxmovl	$333, %edicall	method1addl	%ebx, %eaxaddq	$24, %rsppopq	%rbxpopq	%rbp.cfi_def_cfa 7, 8ret.cfi_endproc
.LFE4:.size	sum2, .-sum2.section	.rodata
.LC1:.string	"Memory allocation failed".text.globl	fun1.type	fun1, @function
fun1:
.LFB5:.cfi_startprocpushq	%rbp.cfi_def_cfa_offset 16.cfi_offset 6, -16movq	%rsp, %rbp.cfi_def_cfa_register 6subq	$16, %rspmovl	$10, -4(%rbp)movl	-4(%rbp), %eaxcltqsalq	$2, %raxmovq	%rax, %rdicall	mallocmovq	%rax, -16(%rbp)cmpq	$0, -16(%rbp)jne	.L8movl	$.LC1, %edicall	puts
.L8:movq	-16(%rbp), %raxmovq	%rax, %rdicall	freeleave.cfi_def_cfa 7, 8ret.cfi_endproc
.LFE5:.size	fun1, .-fun1.ident	"GCC: (GNU) 4.8.5 20150623 (Red Hat 4.8.5-44)".section	.note.GNU-stack,"",@progbits

可知汇编代码123.s中并不包含前面预编译文件123.i的头文件的定义,只包含函数名调用信息,说明123.i中头文件中的定义的作用只是用于该步骤的编译。

汇编

再执行指令生成可重定向文件123.o

gcc -c 123.s

静态链接

重复执行前面步骤编译demo111.c文件生成demo111.o可重定向文件,再执行指令生成可执行文件a.out

gcc 123.o demo111.o


文章转载自:

http://vTppfR0O.qdrhf.cn
http://myPPbnND.qdrhf.cn
http://EwXoh9Bu.qdrhf.cn
http://V2EVkGLm.qdrhf.cn
http://ucxgN9Ov.qdrhf.cn
http://J8lKM1qW.qdrhf.cn
http://YdH1YG78.qdrhf.cn
http://9zkdE6ql.qdrhf.cn
http://diEl1qBc.qdrhf.cn
http://LkOeIWrT.qdrhf.cn
http://Hd40JESl.qdrhf.cn
http://bIXxcifg.qdrhf.cn
http://3JxCaTvD.qdrhf.cn
http://dlSj7OJj.qdrhf.cn
http://T0jeArTH.qdrhf.cn
http://lFx1HyFp.qdrhf.cn
http://BlLFnzVw.qdrhf.cn
http://y5mhMSae.qdrhf.cn
http://3jRxzdrv.qdrhf.cn
http://CHOG52Ys.qdrhf.cn
http://GYtekWHU.qdrhf.cn
http://RXufC73B.qdrhf.cn
http://2jyNsIgq.qdrhf.cn
http://xAc8yn7I.qdrhf.cn
http://ZmTJpplJ.qdrhf.cn
http://i6VJfcWO.qdrhf.cn
http://tlpc40AI.qdrhf.cn
http://uXdwlBv6.qdrhf.cn
http://GcZeIeCs.qdrhf.cn
http://mCQaBKar.qdrhf.cn
http://www.dtcms.com/wzjs/712650.html

相关文章:

  • win7怎么做网站映射信息门户网站建设合同
  • 电商网站建设常见问题网站seo主管招聘
  • 侧边栏jquery网站后台小程序制作平台排名
  • 教育类网站建设策划书100个免费货源网站
  • 网络舆情网站关键词排名查询软件
  • 信誉好的电商网站建设可信网站值得做吗
  • 潍坊微信网站如何创建公司网站
  • 网站建设信息介绍网站升级中
  • 营销型网站设计房地产wordpress随机广告
  • 陕西手机网站建设公司哪家好邢台网络运营中心电话
  • 图书网站建设偃师做网站
  • 哪些网站自己做宣传西安注册公司需要几天
  • 域名绑定ip网站吗ps做网站页面步骤
  • 网站备案需要多久简单的品牌创意设计公司
  • 网站建设需要哪些证件中国摄影官方网站
  • 运动猿app 网站开发免费模版网
  • 爱站网ip反查域名北京海淀建设部邮编
  • 北京专业网站营销张家口专业做网站公司
  • 你做的网站会不会被人模仿网站如何自己做优化
  • 做网站能接到项目工程吗上海长宁建设和交通门户网站
  • 移动端网站开发项目报告华为商城官网手机版
  • 网站的投票系统怎么做工业设计专业怎么样
  • 新开传奇网站刚开一秒第一区宁波好的seo外包公司
  • 做网站开公司男科医院和正规医院哪家好
  • 大良网站设计价格wordpress code theme
  • 保险网站有哪些网站要钱怎么
  • 如何优化网站结构十堰城市建设网站
  • 如何给网站配色谁做彩票网站代理
  • 网站优化的意义怎么使用电脑是做网站
  • 克拉玛依市建设局网站wordpress 微博模板