A. Lex生成的源文件 导入到vc++中 产生的 编译问题
我查了一下, 感觉是不是你在VC++里一些设置步骤还没做?
在安装了Parser Generator后,执行以下步骤,即可使VC++编译和连接由Parser
Generator产生的文件。
1.目录设置
在VC++中执行以下步骤,每个步骤只执行一次。
(1) 选择Tools菜单中的Options命令,在屏幕上即会出现Options对话框。
(2) 选择Directories选项卡。
(3) 在Show Directories for下拉列表框中选择Include Files。
(4) 在Directories框中,点击最后的空目录,并填入Parser Generator的include
子目录的路径。
(5) 在Show Directories for下拉列表框中选择Library Files。
(6) 在Directories框中,点击最后的空目录,并填入Parser Generator的
lib\msdev子目录的路径。
(7) 在Show Directories for下拉列表框中选择Source Files。
(8) 在Directories框中,点击最后的空目录,并填入Parser Generator的Source
子目录的路径。
(9) 点击OK按钮,Options对话框将接受设置并关闭。
VC++在就可以找到包含文件yacc.h和lex.h以及YACC和Lex的库文件。
2.项目设置
对于每个VC++项目,都需在VC++中执行以下步骤:
(1) 选择Project菜单中的Settings命令,在屏幕上即会出现Project Settings对
话框。
(2) 在Settings for下拉列表框中选择Win32 Debug。
(3) 选择C/C++标签。
(4) 在Category下拉列表框中选择General。
(5) 在Preprocessor Definitions框中,在当前文本的最后,输入YYDEBUG。
(6) 选择Link标签。
(7) 在Category下拉列表框中选择General。
(8) 在Object/Library Moles框中,在当前文本的后面,输入yld.lib //这里好象实际使用中不包括后面两个库
ylmtd.lib ylmtdlld.lib。
(9) 在Settings for下拉列表框中选择Win32 Release。
(10) 重复第8步的工作。
(11) 点击OK按钮,Project Settings对话框将接受设置并关闭。
VC++现在可以从特定的库中接受YACC和Lex所需的函数和变量。
3.应用
(1)在Parser Generator下的编辑窗口输入YACC源程序(扩展名必须为.y)。
(2)用Parser Generator下的Project菜单的Compile file命令编译源程序,生成相应的C
语言源程序(.cpp)。
(3)用VC++编译,连接C语言源程序,生成可执行程序(.exe)后即可执行。
B. 用VS编译C 出现一个警告 什么意思啊
警告 2 warning C4013: “getch”未定义;假设外部返回 int d:\文件类\c语言\c 语言项目\c\c\2.c 12 C源代码是# include <stdio.h
void main(){int a[10];int i;for(i=0;i<10;i++){scanf("%d",&a[i]);}a[5]=a[5]+5;
printf("%d",a[5]);getch();}回答:很多涉及字符串的函数是不检查越界的, 不安全。 所以后来有一套新的安全函数替代这个, 第一个warning就是建议你用 scanf_s代替scanf 第二个 warning是说你用的 getch()没定义, 所以编译器假定它是 int getch(void)。 用的函数最好先 include好头文件
warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS
已经是安全主导的年代了,这些老旧的东西微软提供了一些新函式来取代,很简单他在后面加了_s ,例如gets == gets_s ,strcpy == strcpy_s原因解释这种微软的警告,主要因为那些C库的函数,很多函数内部是不进行参数检测的(包括越界类的),微软担心使用这些会造成内存异常,所以就改写了同样功能的函数,改写了的函数进行了参数的检测,使用这些新的函数会更安全和便捷。关于这些改写的函数你不用专门去记忆,因为编译器对于每个函数在给出警告时,都会告诉你相应的安全函数,查看警告信息就可以获知,在使用时也再查看一下MSDN详细了解。库函数改写例子:
mkdir改写为 _mkdir
fopen”改写为 fopen_s
stricmp改写为 stricmp_s
strcpy改写为strcpy_s解决方案:1 根据下面的warning提示:参见“fopen”的声明
消息:“This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details.”
所以可以将函数按warning提示的第二句,改为使用fopen_s函数即可:
例如:FILE *pFile=fopen("1.txt", "w");改为:FILE* pFile;
fopen_s(&pFile, "1.txt", "w");
2 还是根据warning提示的地三句话:use _CRT_SECURE_NO_DEPRECATE
项目|属性|配置属性|C/C++|命令行|附加选项,加入【/D "_CRT_SECURE_NO_DEPRECATE" 】(注:加入中括号中完整的内容)
3 降低警告级别:项目|属性|配置属性|C/C++|常规,自己根据情况降低警告级别(此法不推荐)
注意:高度重视警告:使用编译器的最高警告级别。应该要求构建是干净利落的(没有警告)。理解所有警告。通过 修改代码而不是降低警告级别来排除警告。
编译器是你的朋友。如果它对某个构造发出警告,这经常是说明你的代码中存在潜在的问题。成功的构建应该是无声无息的(没有警告的)。【《
C. 用vs编译C++文件时无法启动程序,并且找不到指定文件怎么办
1、用 VS 打开工程,点击菜单 项目 - 属性。
D. UE如何调用VS编译C\C++
UE配置VS稍微麻烦一点,主要是VS自身对命令编译的支持不够直接,需要先运行它自己的批处理设置环境变量。以VS 10的vc 2010为例,配置UE。
1. 菜单Advanced-> Tool Configuration....
2. 点击Insert,然后Menu Item name里面填写VC(可自己修改);work directory填写%p;command line是关键,填写:
C:Progra~2Micros~2.0VCinvcvars32.bat && C:Progra~2Micros~2.0VCincl "%f"
说明: C:Progra~2Micros~2.0是我电脑里面vc 2010的目录的”短文件“名显示,它的具体名称各个电脑会不同,比如:C:Program Files (x86)Microsoft Visual Studio 10.0VCin
关键是找到vcbars32.bat和cl.exe的位置,----- 进入命令行,从C:盘起,用下面的命令罗列目录名称:
c:>dir/ad/x
每发现一个,用”cd 短目录名称“进入,然后重复上面的dir命令,直到找到visual studio里的bin目录位置.
3. 选择option,选择output to list box和capture output两项,然后OK保存退出。
4.编辑源码,然后再从Advanced从选择步骤2里面填写的VC菜单项,点击运行,就可编译了。
UE的编译环境没有其同门UEStudio来的方便,如果有兴趣,参见网络知道的问题519730341408692205, 那个也我对UEStudio下VC设置的回答。
如果是学习C/C++语言也就罢了,否则VC下的开发,还是用VS自己的IDE或命令行环境吧。
E. 怎么用vs.net编译cs文件
编译 File.cs 以产生 File.exe:
csc File.cs
编译 File.cs 以产生 File.dll:
csc /target:library File.cs
编译 File.cs 并创建 My.exe:
csc /out:My.exe File.cs
F. 用VS编译和C++源文件的时候,源文件和库文件是如何链接到源文件的具体细节
因为我是学习计算机软件专业的,故可以给你讲一下大概意思,我也不敢保证我讲得都是正确的。个人讲解仅供参考。这个是需要学习《计算机编译原理》这门课程的。而且《计算机编译原理》这门课程在软件专业中几乎是最抽象的、难于理解的。
首先关于 Visual Studio编译器(或者是别的 C/C++编译器)是如何将用户亲自编写的源程序经过若干步骤之后,最终变成计算机可执行的二进制代码程序?这里面经过了如下步骤:
(1)、词法分析/语法分析。也就是说当编译器对用户编写的源程序进行编译时,首先检查你的词法(或者是语法)是否正确,这是第一步(这里以 C 语言为例,假如将定义一个整型变量 n 的语句 int n ; 误写成了:intt n ; 属于语法错误)。如果这一步都没有通过编译器的检查的话,那么绝对不会进入第二步。继续返回编辑状态进行语法检查。这种错误是最容易检查的。
(2)、语义分析。这类错误就要比(1)困难得多。这类错误举例如下(这类错误编译器只是会给出一个警告信息,但是编译器是会放过这类错误的。故需要编程人员具有较丰富的编程经验)
void main( )
{
int num ; /* 定义一个整型变量 num */
scanf("%d", &num ) ; /* 从键盘上输入一个整数 */
if( num == 10 ) /* 在这个语句中,如果将逻辑判断等于号 ==,误写为数值等于 =(即:if( num = 10 )),那么该程序的执行结果始终输出:Correct。因为该逻辑表达式 if( 10 ) 的真值始终为 1。 */
printf( "Correct !\n" ) ; /* 实际上程序的本意是:如果输入的数值等于 10,则输出:Correct ! */
else /* 如果输入的数值不等于 10 的话,则输出:Error ! */
printf( "Error !\n" ) ;
}
(3)、在(1)和(2)的基础上进行中间代码生成(例如:在Linux 系统下面生成的 *.o 文件、或者是在 WINDOWS 系统下面生成的 *.obj 文件),这类文件还不是最终的可执行文件。
在此过程中,会应用到各种符号表,以便处理用户程序中使用的各种常量、变量、以及各种函数,等等。
(4)、在前三个阶段的基础上,最终 VS 编译器再将中间代码(*.obj 文件)和其本身提供的库文件(*.LIB)进行链接,最终产生可执行程序(Linux 系统使用的编译器是:gcc,Linux 系统下面的可执行文件名可以任意,WINDOWS 系统下面的可执行文件名为:*.EXE 文件)。
到此为止,一个用户编写的源程序,经过上面若干步骤之后,最终产生了可执行程序,此时就可以在机器上的相应的操作系统上执行了。
G. 为什么用vs编译出来的exe文件不能在电脑上运行
vs2010编译出来的程序默认是debug模式是要用到系统以外的msvcr100d.ll,这个文件在没有装vs或vs运行库的电脑里一般没有,release模式默认要用到系统外的msvcr100.dll,这个文件也是一般电脑上没有,你最好把相应的dll放在同一个文件夹中传过去,以便正常运行。还有,如果你直接传exe文件,QQ会把这个exe文件重命名成“**.exe.重命名文件”,也就是exe文件到对方那里成了".重命名"文件,结果对方电脑找不到相关联的程序,所以提示不知道用什么打开程序,你可以让他再重命名成exe文件,要么你把exe文件放在一个文件夹里面,然后把文件夹传过去,文件夹里面的exe文件是不会重命名的成“.重命名”文件的,只有直接传exe文件时才会被替换成重命名文件。
H. 用VS编译C++程序时,在运行窗口输入信息后,按下回车运行窗口在显示运行结果后立马窗口跳没应如何处理
在程序最末端添加系统暂停语句,如system("PAUSE") 注意要包含#include<cstdlib>或者使用getch()之类的等待输入的语句就行了,按任意键就可以退出了
I. 微软 怎么知道用 vs 编译的
如何使用Visual Studio 2010(VS2010)编译C语言
1.打开VS2010主界面,然后选择,文件→新建→项目,在项目类型中选择VC++→win32 然后在右侧模板中选择win32控制台应用程序,再在下面输入一个名称(项目名称,不用带.C)
选择保存位置后确定,弹出个对话框,不管它,下一步.
2.接下来注意了,这个对话框中,应用程序类型要选择控制台应用程序,附加选项一定要选中“空项目”。然后点完成。然后对话框消失.
3.回到VS主界面,这时会在左侧和右侧多了如图工具栏“解决方案管理器”,在源文件上点右键,选择“添加→新建项”。这里注意,如果你已经有写好的C源文件,那么要选择“现有项”
4.又打开个对话框,不管左边的,在右边的模板中选择C++文件(注一),在下面的名称中输入源文件的名字加上.C(注二),保存位置用默认的。然后点击“添加”
5.好了,编辑页面出来了,大家可以写代码了,这里就写所有程序员无论学什么语言都要写的一个程序“hello world”吧^_^
这里可以看到,VS2010可以智能的标示出函数参数和函数体,方便查看和修改。比VC6.0方便多了。
tips:system(“pause”)(需头文件windows.h)的目的是让程序执行到这个位置的时候“暂停”,让操作者能看到结果。
编好了,然后选择 调试,或者直接点绿色小箭头按钮(注三)就可以查看程序运行结果了,最后,别忘了保存.
好了,介绍完了,相信大家也都掌握了在VS2010下编译C的方法,这样装了VS2010的同学也就不用再费事装VC6.0了,VS很好很强大,其他的功能大家自己慢慢摸索吧,呵呵,不说啦。
注释:
注一:现在已经基本没有纯粹的C编译环境了,都是用兼容C的C++编译工具来编译C,所以创建的模板是C++模板。(大家一定还记得VC6.0中大家新建的文件也是C++SourceFile(C++源文件)吧)
注二:加上.C后,编译系统就会知道这个是C源,从而创建的是C的源文件,编译的时候就会调用C编译器。而不加.C,创建的就是C++的源文件。编译的时候会调用C++的编译器。虽然C++兼容C,但是在不同的C++编译环境对C的支持度是不同的,就比如本文中的例子,那句system函数就是C专有的,如果采用C++来编译就会出错。所以,在不确定所用的C++编译器是不是支持某种C语法的时候,还是老老实实的记得加上.C,来告诉编译系统使用C编译器而不是C++。
注三:绿色小箭头的意思是“调试”,快捷键F5,使用的时候会吧程序从头执行到尾,然后自动退出,如果你的程序没有暂停语句的话,就会出现黑色的程序窗口一闪而过的情况。
如果不想让程序在调试完毕后自动退出,最简便的方法就是选择菜单中的“调试→开始执行”或者按快捷键ctrl+F5
J. 用VS2010怎么编译,调试,运行Vc++文件
以HelloWorld为例 打开VS2010 文件->新建->项目-> 左边安装的模版中,选中Visual C++ 中间选择Win32控制台应用程序,输入项目名称 点击确定->下一步->完成,或者直接点完成 VS2010写了一些代码,可以删掉,然后自己写 #include"stdafx.h" //这个在VS2010得写上 #include<iostream> using namespace std; void main() { cout<<"HelloWord"; } 运行的时候,菜单栏->调试->开始执行(不调试),这样程序会在结尾处停止 如果选启动调试,程序就会直接执行完,看不到结果 编译,就是菜单栏->生成->生成解决方案,或者第四项:生成+(项目名称),或者最后一项,编译 都是同样的效果.