导航:首页 > 源码编译 > 编译器歧义代码

编译器歧义代码

发布时间:2022-12-28 20:08:47

① VB6自带编译器的“本机代码”和“P代码”各是什么求答案

该选项卡设置工程编译时的条件。选项卡选项“编译为 P-代码”
用 p 代码来编译工程。存储在 .vbp 文件中的设置值将被覆盖掉。
“编译为本机代码”
用带有选定最优化的原码来编译工程。存储在 .vbp 文件中的设置值将被覆盖掉。
“快速代码优化”- 通过指示编译器在速度和大小之间首选速度,使 .exe 和 .dll 文件的速度最快。编译器可以减少许多功能上跟机器码序列相同的构造。在某些情况下,这种不同提供了用大小来换取速度的权衡交换。
“小代码优化”- 通过指示编译器在速度和大小之间首选大小,来使 .exe 和 .dll 文件最小。编译器可以减少许多功能上跟机器码序列相同的构造。如果不选中这个选项,代码可能就会大一些,但是速度会更快一些。
“非优化”- 无优化地编译。
“流行的 Pentium Pro™”- 优化所创建的代码,优化方向是使之更有利于 Pentium Pro™ 处理器来处理。如果在程序中使用了这个选项,则意味着仅仅是为 Pentium Pro™ 处理器所创建的代码。用此选项产生的代码仍然可以在更早期的处理器上运行,但是工作起来性能不是那么好。
“创建符号化调试信息”- 在可执行文件或者 DLL 文件中产生符号调试信息。用此选项创建的可执行文件可以用 Visual C++ 或者具有 CodeView 风格调试信息的调试器来调试。设置这个选项将为可执行文件产生一个带有符号信息的 .pdb 文件。
“高级优化”
显示“高级优化”对话框。
给程序设置一个基地址,从而覆盖 .dll 文件的缺省位置(在 0 X 10,000,000 处)。操作系统首先试图在指定的或者缺省的位置加载一个程序。如果没有足够空间,那么系统将重新定位该程序。

② C语言赋值语句:a=b=c;会不会因为不同的C编译器而存在歧义

只要是C语言平台,只要是a、b、c都正确声明过并且c已经赋过值,a=b=c;的意义就是确切的,不会因C编译器的不同面不同。

③ 编译器报:未调用原型函数(是有意用变量定义的吗

编译器报:未调用原型函数(是有意用变量定义的吗?)(本文为原创,转载清注明出外)
MSDN解释:编译器检测到未使用的函数原型。如果有意将该原型作为变量声明,则移除左/右括号。什么意思,简单来说,就是编译无法分辨你当前的代码是在声明一个函数原型,还是在调用一个函数.因为在VS编译器里这样声明一个函数是正确的:test(int(a),int(b)),但我们经常用他做为函数调用来使用。
Code
// compile with: /W1
class Lock {
public:
int i;
};

void f() {
Lock theLock();
// try the following line instead
// Lock theLock;
}

int main() {
}
当然你的意图是调用一个无参构造函数,然而编译器却认为你在声明一个函数.所以报错了.

解决方法是这样调用:test((int(a)),(int(b)));编译通过!!

附MSDN的一个例程:

Code
class BooleanException
{
bool _result;

public:
BooleanException(bool result)
: _result(result)
{
}

bool GetResult() const
{
return _result;
}
};

template<class T = BooleanException>
class IfFailedThrow
{
public:
IfFailedThrow(bool result)
{
if (!result)
{
throw T(result);
}
}
};

class MyClass
{
public:
bool Foo()
{
try
{
IfFailedThrow<>(MyMethod()); //error

// try one of the following lines instead
// IfFailedThrow<> ift(MyMethod());
// IfFailedThrow<>(this->MyMethod());
// IfFailedThrow<>((*this).MyMethod());

return true;
}
catch (BooleanException e)
{
return e.GetResult();
}
}

private:
bool MyMethod()
{
return true;
}
};

int main()
{
MyClass myClass;
myClass.Foo();
}
//在上面的示例中,不含参数的方法的结果作为参数传递给未命名本地类变量的构造函数。该调用会产生歧义:既可以是命名本地变量,也可以是使用对象实例以及相应的指向成员的指针运算符给方法调用加前缀。

④ C语言编译器会编译改变过的代码,而不会编译没有改动的代码。 我想知道它是怎么判断程序是否有呗修改过的

编译器要记录你的编译生成文件,比如obj、exe等的生成日期,发现与相关的文件如.c源文件、obj等日期旧时则选择对此部分重新编译。
特别地,它记录所有相关文件,比如你新修改了某头文件.h,编译系统会逐一比较所有使用这个.h文件的编译结果,如果发现时间旧了就重新编译它们。

⑤ 如何用编译器将自己的源代码转换成目标代码

我们使用编译器将自己的源代码转换成目标代码,
使用链接器将我们的目标代码链接成一个可执行程序。另外,
我们使用一些程序在计算机中输入源代码文本并且编辑它。这些是最初的和最重要的工具,
它们构成程序员的工具集合或“程序开发环境”。
如果你使用的是命令行窗口,
就像很多专业程序员所做的那样,
你将不得不自己来编写编译和链接命令。如果你使用IDE(“交互式开发环境”或“集成式开发环境”),
就像很多程序员所做的那样,
简单地点击正确按钮就可以完成这个工作。附录C介绍了如何在你的C++实现中编译和链接。
IDE通常包括一个具有有用特性的编辑器,
例如用不同颜色的代码来区分你的源代码中的注释、
关键字和其他部分,
以及其他帮助你来调试代码、
编译和运行代码的功能。调试是发现程序中的错误和排除错误的活动,
你在前进的道路上会听到很多有关它的内容。
我们使用微软的Visual
C++作?喑炭
⒒肪呈道
H绻
颐羌虻サ厮怠氨嘁肫鳌被蚴恰癐DE”的某些部分,
那就是所指Visual
C++系统。但是,
你可以使用一些提供最新的、
符合标准的C++实现的系统。我们所说的大多数内容(经过微小的修改)对所有的C++实现都将是正确的,
并且其代码可以在任何地方运行。在工作中,
我们使用几种不同的实现。

⑥ (c语言)我找到问题了,编译器没有报错,还可以运行,谁能解答一下

你这代码错了
能运行但是,不建议这样写,因为有歧义
%s->字符串(char[])占位符
%c->单个字符(char)占位符
char a;//单个字符
char s[10];//字符串
scanf("%c",&a);//输入单个字符
scanf("%s",s);//输入字符串
printf("%c",a);//输出单个字符
printf("%s",s);//输出字符串

⑦ c语言编译器如何运行

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

1、预处理阶段:

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

2、汇编阶段:

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

3、编译阶段:

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

4、链接阶段:

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

⑧ 编译器预定义的宏(可以用来区分使用的是哪种编译器) 详细�0�3

1、_MSC_VER 是微软C/C++编译器——cl.exe 编译代码时预定义的一个宏。需 要针对cl 编写代码时, 可以使用该宏进行条件编译。 2、_MSC_VER 的值表示cl 的版本。需要针对cl 特定版本编写代码时, 也可以使用 该宏进行条件编译。 3、_MSC_VER 的类型是"int",具体版本号定义如下: MS VC++ 9.0 _MSC_VER = 1500 MS VC++ 8.0 _MSC_VER = 1400 MS VC++ 7.1 _MSC_VER = 1310 MS VC++ 7.0 _MSC_VER = 1300 MS VC++ 6.0 _MSC_VER = 1200 MS VC++ 5.0 _MSC_VER = 1100 其中MS VC++ 9.0 就是Visual C++ 2008,MS VC++ 8.0 就是Visual C++2005。 二、介绍预定义宏“__GNUC__” 1、__GNUC__ 是gcc 编译器编译代码时预定义的一个宏。需要针对gcc 编写代码时, 可以使用该宏进行条件编译。 2、__GNUC__ 的值表示gcc 的版本。需要针对gcc 特定版本编写代码时,也可以使 用该宏进行条件编译。 3、__GNUC__ 的类型是“int” 三、预定义宏"__MINGW32__" 1、MinGW编译器 四、symbian sdk 预定义宏: symbian 平台,定义"__SYMBIAN32_" 3rd MR 版及之前的那个3rd 版本,定义"__SERIES60_30__" 3rd FP1 版,定义"__SERIES60_31__" 3rd FP2 版,定义"__SERIES60_32__" 另外,还有一个"__SERIES60_3x__"。若不需区分具体是哪一个3rd 版,则用之。

编程序有歧义性,怎么解决

程序找错最好借助编译器调试,设置断点一句一句的检查每个时刻各变量的值。这样虽然烦琐却很准确,如果你有经验,能够猜测出大概哪句出的问题,效率就高多了。程序排错不借助编译器而自己冥思苦想是完全不可行的!
看书不能停断,但是也绝对要多写程序,实践很重要(一般先看书再关了书写程序)。如果自己花很多时间都找不到错误最好求助于人,好多错误一个人是发现不了的。这方面要不停总结经验,加油吧。

⑩ 编译器是什么

简单讲,编译器就是将“一种语言(通常为高级语言)”翻译为“另一种语言(通常为低级语言)”的程序。一个现代编译器的主要工作流程:源代码 (source code) → 预处理器 (preprocessor) → 编译器 (compiler) → 目标代码 (object code) → 链接器 (Linker) → 可执行程序 (executables)
高级计算机语言便于人编写,阅读交流,维护。机器语言是计算机能直接解读、运行的。编译器将汇编或高级计算机语言源程序(Source program)作为输入,翻译成目标语言(Target language)机器代码的等价程序。源代码一般为高级语言 (High-level language), 如Pascal、C、C++、Java、汉语编程等或汇编语言,而目标则是机器语言的目标代码(Object code),有时也称作机器代码(Machine code)。
对于C#、VB等高级语言而言,此时编译器完成的功能是把源码(SourceCode)编译成通用中间语言(MSIL/CIL)的字节码(ByteCode)。最后运行的时候通过通用语言运行库的转换,编程最终可以被CPU直接计算的机器码(NativeCode)。
编译是从源代码(通常为高级语言)到能直接被计算机或虚拟机执行的目标代码(通常为低级语言或机器语言)的翻译过程。然而,也存在从低级语言到高级语言的编译器,这类编译器中用来从由高级语言生成的低级语言代码重新生成高级语言代码的又被叫做反编译器。也有从一种高级语言生成另一种高级语言的编译器,或者生成一种需要进一步处理的的中间代码的编译器(又叫级联)。
典型的编译器输出是由包含入口点的名字和地址, 以及外部调用(到不在这个目标文件中的函数调用)的机器代码所组成的目标文件。一组目标文件,不必是同一编译器产生,但使用的编译器必需采用同样的输出格式,可以链接在一起并生成可以由用户直接执行的EXE,
所以我们电脑上的文件都是经过编译后的文件。

阅读全文

与编译器歧义代码相关的资料

热点内容
你们有什么好的解压软件 浏览:603
常州空气压缩机厂家 浏览:237
安卓如何关闭app内弹出的更新提示 浏览:407
e4a写的app怎么装苹果手机 浏览:199
海立压缩机海信系 浏览:208
社保如何在app上合并 浏览:220
小米加密照片后缀 浏览:234
我的世界网易手机怎么创服务器 浏览:978
载入单页源码 浏览:930
阿里云服务器seo 浏览:777
海洋斗什么时候上线安卓 浏览:86
中行app如何查每日汇款限额 浏览:840
输入服务器sn是什么意思 浏览:725
sha1算法java 浏览:90
asp代码压缩 浏览:851
按键压枪源码 浏览:180
福建服务器负载均衡是什么 浏览:697
算法将所有的岛屿连通 浏览:313
51单片机40引脚是什么 浏览:536
手机文件夹大小怎么调节 浏览:309