当前位置:首页 » 编程软件 » 多重定义项编译原理

多重定义项编译原理

发布时间: 2022-08-21 10:19:29

编译原理问题

第一个问题:编译时是否有影响无关紧要只是你的源文件变大了,但是执行起来是没有影响的。
第二个:采用静态全局变量是为了在连接多个文件时防止重名问题出现,因为程序员在编程时不会一个人完成一个较大程序,必需要分工,每个人都用自己的文件来写程序,这样在多个文件中可能会把名字起重了,比如在本文件中用static 类型 a定义后,a就只能是B文件的全局变量,这时A文件也可以用static 类型 a来定义,但是它仅限于A文件,当然如果你不把A文件和B文件合在一起就没啥意义了,可以说如果B文件的执行结束了,这个静态全局变量就被释放了。
第三个:只要应用程序结束,变量就释放了
第四个:开辟的空间放在内存中,也就是ram(随机存取存储器),你理解的对

❷ C++项目编译错误:找到一个或多个多重定义的符号。。我觉得应该是include的问题,但是不知道怎么改

确实是include的问题
因为错得比较离谱,对于函数的定义、函数的声明、函数的定义和声明分开等等概念不清楚,所以建议还是专门找找这方面的资料,了解如何编写多文件工程再来。

另:有个不正统的方法可以把你这个改得能编译通过,把book.cpp和BData.cpp从工程中去掉(不是删除文件)应该就没问题了

❸ c++避免多定义或重定义

你好,最好的处理办法是在工程的cpp文件里定义全局变量,然后在别的文件里不要包含。直接用
extern声明就好了。比如extern int g_a;

❹ 多重嵌套宏定义有什么好处

#define WIDTH 80 #define LENGTH (WIDTH+40) 在第二个宏定义中,使用了前面定义过的宏名WIDTH。在编译预处理时,程序中所有的WIDTH都被80所替换,所有的LENGTH又被(80+40)替换

c语言里系统总是说,有符号多重定义,怎么找是哪个符号,选取下面的

一般编译器会提示哪个符号被重定义。下面是VS2012环境编译的情况。如果编译器不指出,可以右击变量,点击转到定义,看下是否多个地方定义。

❻ C语言编译原理是什么

编译共分为四个阶段:预处理阶段、编译阶段、汇编阶段、链接阶段。

1、预处理阶段:

主要工作是将头文件插入到所写的代码中,生成扩展名为“.i”的文件替换原来的扩展名为“.c”的文件,但是原来的文件仍然保留,只是执行过程中的实际文件发生了改变。(这里所说的替换并不是指原来的文件被删除)

2、汇编阶段:

插入汇编语言程序,将代码翻译成汇编语言。编译器首先要检查代码的规范性、是否有语法错误等,以确定代码的实际要做的工作,在检查无误后,编译器把代码翻译成汇编语言,同时将扩展名为“.i”的文件翻译成扩展名为“.s”的文件。

3、编译阶段:

将汇编语言翻译成机器语言指令,并将指令打包封存成可重定位目标程序的格式,将扩展名为“.s”的文件翻译成扩展名为“.o”的二进制文件。

4、链接阶段:

在示例代码中,改代码文件调用了标准库中printf函数。而printf函数的实际存储位置是一个单独编译的目标文件(编译的结果也是扩展名为“.o”的文件),所以此时主函数调用的时候,需要将该文件(即printf函数所在的编译文件)与hello world文件整合到一起,此时链接器就可以大显神通了,将两个文件合并后生成一个可执行目标文件。

❼ C语言编译出现了 多重定义的符号 的报错

同一个工程中创建了多个main函数
关闭当前工程,另建一个工程后重新编译

❽ C++中两个文件读取一个.h时多个多重定义错误

从昨晚到现在查了很多东西,但结果却超级简单:
首先#include在编译时会被预处理器将.h中的所有内容拷贝到当前文件中, 如果.h中还include了别的.h, 则递归拷贝;
如果.h文件中没有头文件保护,即#ifndef ... #define ... #endif则如果某文件include 1.h和 3.h, 而1.h也#include了3.h, 则会有完全相同的两份3.h中的代码, 这样就直接报错了; 但加入了头文件保护后就可以保证在单一文件中只会编译一遍3.h的代码;
所以到目前为止如果加入了头文件保护,在单一文件中不会有重声明(定义),编译可以通过,生成各个.o文件了, 头文件中定义的变量都定义并分配了空间,就你的问题而言,tool.o中有Map, 同时main.o中也有Map;
然后就是链接了,此时会将各.o中的全局符号加入全局符号表中,如果.o中有相同的全局变量则会报重定义, 即tool.o和main.o中的Map冲突了。

总结下:头文件保护只是保证在 单一文件中不会重复include, 但不保证在不同文件中重复include。

解决办法为在.h中只声明变量: extern map Map; 而在tool.cpp中定义: map Map;

多谢问题哈,终于搞清楚了这个问题!

❾ 关于编译原理

可以自己写一个JPanel或者JComponent的子类,然后在子类中重写paint方法,在里面绘制背景图片。下面的部分是从我的代码里截出来的,不保证这样能用,只是给你个大体的丝路。学会了这个后自己重写组件就方便多了 public class ChessBoard extends JComponent{ private Image screen = null; public void paint(Graphics g) { if (screen != null) { g.drawImage(screen, (width - BOARDWIDTH) / 2, (height - BOARDHEIGHT) / 2, this); } else { screen = ChessBoard.this.createImage(BOARDWIDTH,BOARDHEIGHT); } } }

❿ 编译C程序出现多重定义,怎么解决

应该是你在2个c文件中都定义了全局的MmiUtil_WaitKeyMenu,可以声明为static,或者改个名字

热点内容
华为平板怎么储存服务器文件 发布:2025-02-06 12:49:21 浏览:479
php查询结果数组 发布:2025-02-06 12:31:05 浏览:714
怎样把照片压缩打包 发布:2025-02-06 12:15:19 浏览:496
如何编译java文件 发布:2025-02-06 12:05:58 浏览:237
九九乘法编程 发布:2025-02-06 12:05:05 浏览:519
台式机忘记开机密码怎么办 发布:2025-02-06 11:58:01 浏览:871
android刷新按钮 发布:2025-02-06 11:57:17 浏览:586
存储过程有输入参数和输出参数 发布:2025-02-06 11:55:32 浏览:99
成绩评选算法 发布:2025-02-06 11:42:51 浏览:997
数据库测试数据 发布:2025-02-06 11:31:05 浏览:824