导航:首页 > 源码编译 > 两个源文件怎么防止重复编译

两个源文件怎么防止重复编译

发布时间:2022-09-12 20:41:42

‘壹’ VC如何解决重复包含头文件的问题

语法上对头文件里的内容没有任何限制

c++语法有个要求就是任何名字(类型、变量或者函数什么的)都要“先声明后使用”,注意这个要求的范围是在同一个文件里,就是说你这个.cpp里用到的东西必须在你这个.cpp里先有声明。 如果你要用string类的变量, 你就必须先写清楚这个类型的声明,编译器才知道怎么去编译这一段。 所以你要是不怕累的话你可以就挨个用到的地方重复写一下,但是因为这个可能很麻烦, 也可能会几个地方写的不一致, 解决办法就是采用一个头文件,每个地方都include这个头文件, 就相当于写了这个类型的声明。 include命令的作用就是把那个头文件的内容复制到这里来, 至于头文件里面到底写了什么其实是没有语法要求的,但是如上所述, 头文件既然主要是解决这个声明的问题, 所以当然你看到的头文件里主要内容还都是声明。 现在模板横行的时候由于一些技术问题造成头文件里也写了很多实现, 这个解释起来有点麻烦,你可以不搭理它

所以总结一下, C语言要求先声明后使用,所以用头文件来形成一个统一声明, 而之所以要防止重复include头文件,是因为一个cpp里一个名字是不可以被定义多次的, 所以对那些声明=定义的东西如果重复include了,编译的时候就容易出现重复定义的错误,当然对有些声明跟定义截然分开的情况来说,重复include也没问题

‘贰’ 两个源文件都包含了同一个头文件,但是已经做了防止重复包含的处理,为啥还是冲突呢

这不是重复包含的问题。
发生冲突的是变量。头文件里提供变量的声明就行,定义放在cpp文件里。比如int stuNum = 0;
你把这句写在main.cpp里,然后在main.h里加上extern int stuNum;
带上初始化的只能是定义,所以引用了两次头文件之后,就产生了两个定义,就会导致符号冲突。

‘叁’ C 语言中多文件编译的问题

如果有多个源文件,基本上有两种编译方法:
[假设有两个源文件为test.c和testfun.c]
1.
多个文件一起编译
用法:#gcc
testfun.c
test.c
-o
test
作用:将testfun.c和test.c分别编译后链接成test可执行文件。
2.
分别编译各个源文件,之后对编译后输出的目标文件链接。
用法:
#gcc
-c
testfun.c
//将testfun.c编译成testfun.o
#gcc
-c
test.c
//将test.c编译成test.o
#gcc
-o
testfun.o
test.o
-o
test
//将testfun.o和test.o链接成test
以上两种方法相比较,第一中方法编译时需要所有文件重新编译,而第二种方法可以只重新编译修改的文件,未修改的文件不用重新编译。

‘肆’ c语言如何避免重复包含头文件

#include 通常不会包含 .cpp 文件,如果包含的话,一般仅会包含如 static 的函数这样不会因为多次包含而导致链接问题的。
为了防止重复包含,头文件中都会有相应的处理,比如加上
#ifndef _STDIO_H_
#define _STDIO_H_
// 真正的头文件内容

#endif
这样在多次包含的时候,因为已经定义了 _STDIO_H_,所以第二次包含的内容会被忽略。
比较新的 C++ 编译器也支持 #pragma once,这样只要在头文件开头写上这一句,编译器就会在处理头文件的时候不包含多次了。

‘伍’ 建立两个C++源程序,先打开第一个,编译运行后,再打开第二个进行编译运行,会出现什么问题原因

会出现main already defined in Cpp1,one or more multiply defined symbols found,编译不会出错,但是组建就会出现上述情况,有1个或更多的主函数发现,但是只允许一个main函数,要在文件栏关闭工作区,才能打开另外一个。

‘陆’ 如何防止java程序源代码被反编译

我们都知道JAVA是一种解析型语言,这就决定JAVA文件编译后不是机器码,而是一个字节码文件,也就是CLASS文件。而这样的文件是存在规律的,经过反编译工具是可以还原回来的。例如Decafe、FrontEnd,YingJAD和Jode等等软件。下面是《Nokia中Short数组转换算法
类中Main函数的ByteCode:0 ldc #162 invokestatic #185 astore_16 return其源代码是:short [] pixels = parseImage("/ef1s.png");
我们通过反编译工具是可以还原出以上源代码的。而通过简单的分析,我们也能自己写出源代码的。
第一行:ldc #16
ldc为虚拟机的指令,作用是:压入常量池的项,形式如下ldc index这个index就是上面的16,也就是在常量池中的有效索引,当我们去看常量池的时候,我们就会找到index为16的值为String_info,里面存了/ef1s.png.
所以这行的意思就是把/ef1s.pn作为一个String存在常量池中,其有效索引为16。
第二行:2 invokestatic #18
invokestatic为虚拟机指令,作用是:调用类(static)方法,形式如下
invokestatic indexbyte1 indexbyte2
其中indexbyte1和indexbyte2必须是在常量池中的有效索引,而是指向的类型必须有Methodref标记,对类名,方法名和方法的描述符的引用。
所以当我们看常量池中索引为18的地方,我们就会得到以下信息:
Class Name : cp_info#1
Name Type : cp_info#19
1 和19都是常量池中的有效索引,值就是右边<中的值,再往下跟踪我就不多说了,有兴趣的朋友可以去JAVA虚拟机规范。
这里我简单介绍一下parseImage(Ljava/lang/String;)[S 的意思。
这就是parseImage这个函数的运行,我们反过来看看parseImage的原型就明白了
short [] parseImage(String)
那么Ljava/lang/String;就是说需要传入一个String对象,而为什么前面要有一个L呢,这是JAVA虚拟机用来表示这是一个Object。如果是基本类型,这里就不需要有L了。然后返回为short的一维数组,也就是对应的[S。是不是很有意思,S对应着Short类型,而“[”对应一维数组,那有些朋友要问了,两维呢,那就“[[”,呵呵,是不是很有意思。
好了,调用了函数,返回的值要保存下来吧。那么就是第三行要做的事情了。

‘柒’ python源码编程成pyc后,怎么防止反编译

无法防止反编译,但可以混淆,让你即使反编译了,也看不懂语法
下面一段源码

sd=1

defseed(s):
globalsd
sd=s

defrandn(n):
globalsd
sd=(sd*1103515245+12345)&0x7fffffff
returnsd%n

defmain():
seed(11)
foriinxrange(4):
printrandn(313)

if__name__=='__main__':
main()

混淆后

oo000=1
if9-9:Ii.o0o00Oo0O-iI11I1II1I1I
defoooo(s):
globaloo000
oo000=s
if11-11:ii1I-ooO0OO000o
defii11i(n):
globaloo000
oo000=(oo000*1103515245+12345)&0x7fffffff
returnoo000%n
if66-66:iIiI*iIiiiI1IiI1I1*o0OoOoOO00
defI11i():
oooo(11)
forO0Oinxrange(4):
printii11i(313)
if78-78:i11ii11iIi11i.oOoO0oo0OOOo+IiiI/Iii1ii1II11i
if__name__=='__main__':
I11i()#

‘捌’ 如何改动makefile来避免没有改动过的.c文件重复编译

1.所有源文件没动过,时间戳没有变,任何操作都没有;
2.生成的中间文件和目标文件都在,没动过;
3.我的makefile是把不同目录生成的所有中间文件都移到同一个obj目录,最后在链接生成目标文件

‘玖’ 一个程序两个以上源文件怎么编译

每一个项目只能有一个main函数,如果想再写一个main函数那只能新建一个项目了,然后把其他需要的代码添加进来。之前的项目源文件不修改,exe文件没有必要保存,除非你做出来一个有意义的可以称为软件的程序。

‘拾’ 怎样才能解决能在C++ 中同时编译两个源文件的问题main()不能重复出现,那样要怎么弄才能同时编呢

去掉或者注释掉那个多余的main就可以了

阅读全文

与两个源文件怎么防止重复编译相关的资料

热点内容
卡尔曼滤波算法书籍 浏览:764
安卓手机怎么用爱思助手传文件进苹果手机上 浏览:841
安卓怎么下载60秒生存 浏览:800
外向式文件夹 浏览:233
dospdf 浏览:428
怎么修改腾讯云服务器ip 浏览:385
pdftoeps 浏览:490
为什么鸿蒙那么像安卓 浏览:733
安卓手机怎么拍自媒体视频 浏览:183
单片机各个中断的初始化 浏览:721
python怎么集合元素 浏览:477
python逐条解读 浏览:829
基于单片机的湿度控制 浏览:496
ios如何使用安卓的帐号 浏览:880
程序员公园采访 浏览:809
程序员实战教程要多长时间 浏览:972
企业数据加密技巧 浏览:132
租云服务器开发 浏览:811
程序员告白妈妈不同意 浏览:333
攻城掠地怎么查看服务器 浏览:600