‘壹’ 计算机通过什么可以查询程序代码
10 代码编辑、编译、审查
10-1:打开编译器的所有告警开关对程序进行编译。
10-2:在产品软件(项目组)中,要统一编译开关选项。
10-3:通过代码走读及审查方式对代码进行检查。
说明:代码走读主要是对程序的编程风格如注释、命名等以及编程时易出错的内容进行检查,可由开发人员自己或开发人员交叉的方式进行;代码审查主要是对程序实现的功能及程序的稳定性、安全性、可靠性等进行检查及评审,可通过自审、交叉审核或指定部门抽查等方式进行。
10-4:测试部测试产品之前,应对代码进行抽查及评审。
10-1:编写代码时要注意随时保存,并定期备份,防止由于断电、硬盘损坏等原因造成代码丢失。
10-2:同产品软件(项目组)内,最好使用相同的编辑器,并使用相同的设置选项。
说明:同一项目组最好采用相同的智能语言编辑器,如Muiti Editor,Visual Editor等,并设计、使用一套缩进宏及注释宏等,将缩进等问题交由编辑器处理。
10-3:要小心地使用编辑器提供的块拷贝功能编程。
说明:当某段代码与另一段代码卜让前的处理功能相似时,许多开发人员都用编辑器提供的块拷贝功能来完成这段代码的编写。由于程序功能相近,故所使用的变量、采用的表达式等在功能及命名上可能都很相近,所以使用块拷贝时要注意,除了修改相应的程序外,一定要把使用的每个变量仔细查看一遍,以改成正确的。不应指望编译器能查出所有这种错误,比如当使用的是全局变量时,就有可能使某种错误隐藏下来。
10-4:合理地设计软件系统目录,方便开发人员使用。
说明:方便、合理的软件系统目录,可提高工作效率。目录构造的原则是方便有关源程序的存储、查询、编译、链接等工作,同时目录中还应具有工作目录----所有的编译、链接等工作应在此目录中进行,工具目录----有关文件编辑器、文件查找等工具可存放在此目录中。
10-5:某些语句经编译后产生告警,但如果你认为它是正确的,那么应通过某种手段去掉告警信息。
说明滑码:在Borland C/C++中,可用“#pragma warn”来关掉或打开某些告警。
示例:
#pragma warn -rvl //型清 关闭告警
int examples_fun( void )
{
// 程序,但无return语句。
}
#pragma warn +rvl // 打开告警
编译函数examples_fun时本应产生“函数应有返回值”告警,但由于关掉了此告警信息显示,所以编译时将不会产生此告警提示。
10-6:使用代码检查工具(如C语言用PC-Lint)对源程序检查。
10-7:使用软件工具(如 LogiSCOPE)进行代码审查。
‘贰’ 用威纶触摸屏软件EB8000反编译的时候出现格式错误报警,是咋回事呢
文件丢失,触摸屏程序复制到其他电脑就用不了,因为有配置文件你没复制全。
‘叁’ 什么是编译开关 pascal
在编译窗口中连按两下“ctrl+o”可以在程序头中出现所有编译开关情况,也可以自己书写。
下面是一些常见开关所代表的意思:
1)数据对齐(Align Data)
{$A+}或{$A-}
在{$A+}状态下,将非字符按偶地址对齐存放,可以提高8086和80286存取数据的速度。不影响字节变量、记录域结构和数组元素。在{$A-}状态下,将使用字节对齐方式,数据可存放在奇地址或偶地址。
2)布尔运算(Boolean Evaluation)
{$B+}或{$B-}
在{$B+}状态下,编译器产生完全布尔表达式运算代码。布尔表达式中的每个操作都确保被计算。既是整个表达式的结果以确定,还继续运算其余的表达式。
在{$B-}状态下,编译器产生短路布尔表达式运算代码。接着从左到右运算,当整个表达式结果确定后,就停止运算。
3)调试信息(Debug Information)
{$D+}或{$D-}
{$D+}产生调试信息,它在编译程序或单元产生运行错误时,能自动定位引起错误的语句。
4)浮点仿真(Emulation)
{$E+}或{$E-}
{$E+}只是在8087协处理器不存在时,将连接运行库以便对协处理器进行仿真。
{$N+,$E+}状态编译程序,系统将同8087仿真器连接,得到exe文件,不管有无8087,都可以在机器上进行IEEE标准754的二进制浮点运算。
{$N+,$E-}状态下,只能在有8087时,才能进行IEEE标准754的二进制浮点运算。
8087仿真开关如果用在一个单元是无效的,它只能用于程序的编译。
5)输入输出检查(Input/Output Checking)
{$I+}或{$I-}
$I指示控制是否自动产生对调用过程的结果进行检查。
6)数字处理(Numberic Processing)
{$N+}或{$N-}
{$N-}状态,在机器上只能进行实数类型运算。在{$N+}状态,在有8087协处理器或没有用{$E+}指示对8087进行仿真,都可以对IEEE浮点类型进行运算。
7)范围检查(Range Checking)
{$R+}或{$R-}
$R+进行边界和范围检查
8)栈溢出检查(Stack Overflow Checking)
{$S+}或{$S-}
在{$S+}状态下编译,程序在每个过程或函数的开始生成一段代码,用于检查是否有足够的栈空间供局部变量使用。若栈空间不够,程序停止运行,并显示运行错误。
在{$S+}状态下这样调用会导致系统崩溃。
9)变量串检查(Var String Checking)
{$V+}或{$V-}
在{$V+}状态下,实行严格的类型检查,要求形参、实参具有同一字符串类型。
在{$V+}状态下,允许任意类型的字符串变量作为实参,甚至是一实参的最大长度不同于形参长度。
BP7下的最佳参数是:
{$A+,B-,D-,E-,F-,G+,I-,L-,N+,O-,P+,Q-,R-,S-,T-,V-,X+,Y-}
{$M 65520,0,655360}
其中D和L与调试有关,调试时必须打开这两个参数
N+可以使程序能够使用扩展实型。一般情况下,Real速度最慢,不应该使用。
在编辑环境下按Ctrl+O+O,可以自动列出默认的编译指示,然后再自己改,这样比较快
要想知道各个参数的意义,可以察看BP7的联机帮助文档
‘肆’ 西门子300plc编译下载时提示警告,块ob1已在cpu中存在,结果并未下载。是什么原因该怎么解
1,检查cpu的开关拨到了STOP状态
2,用PLC的拨码清空程序。也可以点S7的在线按钮(会显示PLC里面的程序块和程序块存储位置)看下是不是真的有组态程序
3,你的程序寻址范围或I/O过程映像超出CPU的范围。检查方法如下:SIMATIC管理器,打开你要下载的程序,选择菜单“Optionals”/Reference Data/Display“(选项/参考数据/显示),在出现的对话框中,在”Customize“(顾客化)中选择”Cross Reference“(交叉参考表),在出现的参考表中检查相应的位存储器区地址和I/O映像输入输出是否真的超出范围
4,OB1里调用了CPU不支持的程序或指令。
5,调用了不支持的SFC/SFB
6,变量地址超出了范围
先检查这些吧。看下问题可以解决不(最多发生的是3)
‘伍’ opencv,vc++6.0,编译程序老是出错和警告; warning D4002 : ignoring unknown option '/Qwd167'
你好:
error C1010: unexpected end of file while looking for precompiled header directive.
可能原因为工程中 stdafx.h 未包含。
//
在VC 6.0中编译c++程序时报该错原因为需要一个预编译的文件stdafx.h, 如果不需要编译该头文件的话,只需要尘伏枣打开seting 页面设置中在c/c++栏,选择PreCompiled headers,然后设置第一选项,选择不使用预编译头,解决这个问题。
或者
直接打开dsp工程文件厅羡,找到 /Yu"stdafx.h"去掉即可派拆。
//
一般来说,在编译某个文件时,往往发现编译器指向某个源码文件的末尾,并且提示以上信息时,直接在cpp顶上加一项"stdafx.h".
而且不管文件所处是否和stdafx.h文件在同一目录中。编译后即可通过,没必要去修改编译开关。一般而言:预编译功能是解决大量标头文件重复编译的问题。
在stdafx.h头中,我们一般把那些公用的头文件放置在其中。特别是调用dll组件包时,dll引入到工程中。
‘陆’ 编译这样的告警怎么消除掉
楼主这是什么工具?这个是编译告警还是运行时候的告警?
从字面来看是
1、第一个告警是隐式定义系统山饥告函数strcmp,这个肢敬包含逗明一下头文件就可以了。具体参照二楼的包含string.h,如果楼主是windows操作系统的话,有个最全的头文件windows.h,直接包含进来省事了。
#include <windows.h>或者
#include <string.h>
2、第二个告警是隐式类型转换,int(整数)到unsigned int(无符号整数)会导致精确度丢失。strlen返回的是字符串的长度,长度不会是负数,所以一定是无符号的。楼主的len定时成unsigned int就行了。
int len改成
unsigned int len就行了。
或者
len = (int)strlen(codeb);显示的强制类型转换。
楼主的编译器很严格,一般编译器对这种告警都是忽略的。楼主忽略也可。
‘柒’ java程序可以编译 但是会有警告 为什么呢
告警是编译时检查发现不符合一些常用约定,但是不妨碍执行。
ThestaticfieldText3.ishouldbeaccessedinastaticway
以下是修改过的代码。
publicclassText3{
staticinti=47;//静态方法共用内存
publicvoidcall(){
System.out.println("调用call方法");
for(i=0;i<3;i++){
System.out.print(i+"");
if(i==2){
System.out.println();
}
}
}
publicstaticintgetI(){
returni;
}
publicstaticvoidsetI(inti){
Text3.i=i;
}
publicText3(){
}
publicstaticvoidmain(String[]args){
//TODOAuto-generatedmethodstub
Text3t1=newText3();
Text3t2=newText3();
Text3.setI(60);//这里有警告
Text3.i++;
System.out.println("第一个实例对象调用变量i的结果为i="+Text3.getI());//这里有警告
t1.call();//调用call方法后,i的值变成了3
Text3.i++;
System.out.println("第二个实例对象调用变量i的结果为i="+Text3.getI());//这里有警告
t2.call();
}
}
‘捌’ 关于c++中float fnum=0.1编译警告的问题
0.1默认是double类型,double类型向float类型赋值会有精度丢失。
消除编译告警的话,在0.1后面加一个f,即0.1f,告正握警编译器这个是float类型握陪,举皮庆就不会出编译告警了。