判断一段程序的编译
A. C语言文件的编译与执行的四个阶段并分别描述
开发C程序有四个步骤:编辑、编译、连接和运行。
任何一个体系结构处理器上都可以使用C语言程序,只要该体系结构处理器有相应的C语言编译器和库,那么C源代码就可以编译并连接到目标二进制文件上运行。
1、预处理:导入源程序并保存(C文件)。
2、编译:将源程序转换为目标文件(Obj文件)。
3、链接:将目标文件生成为可执行文件(EXE文件)。
4、运行:执行,获取运行结果的EXE文件。
(1)判断一段程序的编译扩展阅读:
将C语言代码分为程序的几个阶段:
1、首先,源代码文件测试。以及相关的头文件,比如stdio。H、由预处理器CPP预处理为.I文件。预编译的。文件不包含任何宏定义,因为所有宏都已展开,并且包含的文件已插入。我归档。
2、编译过程是对预处理文件进行词法分析、语法分析、语义分析和优化,生成相应的汇编代码文件。这个过程往往是整个程序的核心部分,也是最复杂的部分之一。
3、汇编程序不直接输出可执行文件,而是输出目标文件。汇编程序可以调用LD来生成可以运行的可执行程序。也就是说,您需要链接大量的文件才能获得“a.out”,即最终的可执行文件。
4、在链接过程中,需要重新调整其他目标文件中定义的函数调用指令,而其他目标文件中定义的变量也存在同样的问题。
B. 如何判断一段程序是由c 编译程序还是由c++编译 程序编译的
ANSIC标准中有一个__cplusplus标识符,当你编译C++程序时,这个标识符就会被定义;当你编译C程序时,这个标识符不会被定义。这样,你就可以检查程序是不是用C++编译程序编译的,请看下例: #ifdef __cplusplus /* Is __cplusplus deftned? */ #define USING_C FALSE /* Yes,we are not usingC*/ #elSe #define USING_C TRUE /* NO,we are usingC*/ #endif 当对上例进行编译预处理时,预处理程序首先检查标识符__cplusplus是否已被定义——如果C被定义,它就将USING_C赋值为FALSE;反之,它就将USING_C赋值为TRUE。此后,你就可以在程序中检查USING_C的值,并由此判断程序是不是用C++编译程序编译的。
C. 如何判断一段程序是由c 编译程序还是由c++编译程序编译的
通常的编译C程序的软件也可以编译C++的程序,C++也是建立在C的基础上的。通常C语言的文件是以(.c)为后缀的,而c++的文件基本都以(.cpp)为后缀的。关于如何区分还要看程序里面的某些关键的函数,头文件等来区分。
D. 如何判断一个程序是C编译的还是C++编译的
一般情况来说,C语言代码是可以用C++编译器编译的,但是C编译器,就一般不能编译C++代码。
自己区分的话:
1、包含头文件格式:
#include
和有using namespace的,都应该属于C++的内容。
而#include也应该是C++,因为它属于C++的库,由于C++代码可以应用C语言的函数库,所以比较难区分。
比如#include的,不一定就是C语言代码
E. C语言编译器会编译改变过的代码,而不会编译没有改动的代码。 我想知道它是怎么判断程序是否有呗修改过的
编译器要记录你的编译生成文件,比如obj、exe等的生成日期,发现与相关的文件如.c源文件、obj等日期旧时则选择对此部分重新编译。
特别地,它记录所有相关文件,比如你新修改了某头文件.h,编译系统会逐一比较所有使用这个.h文件的编译结果,如果发现时间旧了就重新编译它们。
F. 怎样判断一段程序是由C编译程序还是由C++编译程序编译的
简单的说,由于C语言是没有重载函数的概念的,所以C编译器编译的程序里,所有函数只有函数名对应的入口。而由于C++语言有重载函数的概念,如果只有函数名对应入口,则会出线混淆。所以C++编译器编译的程序,应该是函数名+参数类型列表对应到入口。
注意,因为main函数是整个程序的入口,所以main是不能重载的,所以,如果一个程序只有main函数,是无法确认是C还是C++编译器编译的。
可以通过nm来查看函数名入口。
如一个函数
int foo(int i,float j)
C编译的程序通过nm查看
f 0x567xxxxxx (地址)
C++编译程序,通过nm
f(int,float) 0x567xxxxxx
G. 判断一个程序是C编译的还是C++编译
如果编译器在编译cpp文件那么__cplusplus 就会被定义 如果是一个c文件在被编译那么__STDC__就会被定义
H. 如何判断一段程序是由C编译程序还是由C++编译程序编译的
C编译时定义了_cplusplus,C++编译时定义了_STDC_#ifdef _cplusplus /*判断是否用C++编译器?*/ #define USING_C 0 /*是用C编译器*/ #else #define USING_C 1 /*是用C++编译器*/ #endif #include <stdio.h> int main() { if(USING_C) printf("C++\n"); else printf("C\n"); system("pause"); return 0; } 编写C与C++兼容的代码所需的宏如下:#ifdef __cplusplus extern "C" { #endif // 具体的代码 #ifdef __cplusplus } #endif
I. 如何判断一段代码是C编译程序还是C++编译程序
1.文件就不同
c++有输入输出流文件即#include
c用的是scanf
和printf
而c++用的是cout
和cin
2.c++有类的定义,c是没有的
J. 怎么判断一个程序使用什么语言写的
使用查壳工具PEID 。
PEiD是很好用的查壳工具,可以很简单的知道软件是不是加了壳,有了这个PEiD ,几乎可以侦测出软件所有的壳,其数量已超过470 种PE文档 的加壳类型和签名,另外PEiD还可识别出exe文件是用什么语言编写的,比如:VC++、Delphi、VB或Delphi等。
peid功能介绍
1、正常扫描模式:PEiD可在PE文档的入口点扫描所有记录的签名。
2、深度扫描模式:可深入扫描所有记录的签名,这种模式要比上一种的扫描范围更广、更深入。
3、核心扫描模式:PEiD可完整地扫描整个PE文档,建议将此模式作为最后的选择。
(10)判断一段程序的编译扩展阅读
PEID的主要模块:
1、任务查看模块:可以扫描并查看当前正在运行的所有任务和模块,并可终止其运行;
2、多文件扫描模块:可同时扫描多个文档。选择“只显示PE文件”可以过滤非PE文档;选择“递归扫描”可扫描所有文档,包括子目录。
3、Hex十六进制查看模块:可以以十六进制快速查看文档。