1. VC一个工程只能添加一个C程序
1)一个工程中只能有一个main函数+多个源文件+多个头文件,如想创建多个,你需要创建一个工作区,一个工作区中可以创建多个工程,这样你就可以调试多个程序了。
ps:如果工作区中建立了多于一个的工程,记得在调试程序前先将该工程设定为“活动工程”
2)这是你的程序出错了,属于逻辑错误,看看是不是输入值导致溢出,指针界线设定错误等问题。
2. 不同种的linux可用相同软件吗
理论上可以,实际上看人品。
Linux 特有的依赖问题,导致有的程序会依赖某一个特定版本或者特定编译参数而编译出来的 so 文件(对应 Windows 是 dll 文件)。
Linux 对于这一点有一个标准可以执行的,不过很难保证这个标准是否能顺利执行,因为每个软件包的编写都是独立的,很难让所有的人都遵循一个标准。也很难说那个系统会没有使用某个特定的功能包。因为有很多替代方案可以选择。
对应的 Windows 也有 dll hell (dll 地狱)的问题。不过 Windows 的系统没有软件版本管理系统。所以 Windows 的做法是 Dll 里面同时准备新版本和旧版的库接口。但这会导致新系统越来越大也容易出现问题。Linux 的做法是到时候放弃旧版本接口(不过放弃的很少),但编译器也会为了软件稳定,而编译时连接到需要 so 的某一个特定的版本上。这个时候软件也会出现依赖问题而不能运行,表现是找不到某个 .so.xxx.yyy.zzz 。
所以,纯看人品。
一般情况下,相同时代的相同定位的 Linux 系统。他们的软件可以通用。
3. 同一个C语言程序,若在两台不同指令系统的机器上运行,编译后的程序是否一样能否用同一个编译器编译
如果生成的程序不是在本机上运行的话,这种编译器叫做 cross compiler
不是 cross compiler 的话,生成的程序就只能在本机以及与本机具有相同指令集的机器上运行了
4. 每个编译器都不一样么 c语言一般用什么编译器 每次一种编译器不能编译 另一种却能编译出
编译器就是c语言编译成二进制的东西,
不同的编译器是不同的, 比如16位系统和32位系统的编译器就不同,因为16位的认为int是2字节,32位的则认为是4个字节。 另外 linux上的编译器跟windows下的编译器也不同,linux上的认为内核空间占1G,而windows下则认为占2G, 此外两个系统对环境变量以及其他的设置也不同所以编译器更不能用。
而且不同的CPU的指令集时不同的,所以同样int a =1 最后被编译成的二进制代码也是不同的。
C语言的编译器有很多,windows下的编译器也有很多,不同的编译器可能会做一些不同的优化,linux下的gcc也可以添加选项让他编译windows下运行的程序。
main(int argc,char*argv[ 】 ) argc 是你的参数个数 argv是你的参数。
比如你最终程序叫 add 那么 你在命令行执行add 1 2 那么argc =3 第一个参数使你的add, 第二个第三个就是 1 2, 在函数内部你就可以获取这俩参数进行相加然后打印
visual 是个IDE,集成开发环境,已经集成好了windows下使用的编译器连接器 等, 编写代码完成后直接点击编译就行了。 IDE的默认编译器是可以更改的,不同的IDE设置不同。
5. 为什么C语言编译器编出的软件,只能在windows下运行
其实我一也不是很专业,在这里发言有mark的意思,等看高人答案。
我理解的是这个就好像是人类和大猩猩一样,同样的挥手,对人来说是友好,但是对大猩猩是骂人(笑话里的)。
不同的系统,对程序代码的解释是不同的,所以会出错吧。
就好像.net程序在没有.net framework库的时候就是在windows下也是打不开的。
等高人。
6. c语言问题,在源文件下编写了两个cpp文件,只能运行其中的一个,另外一个怎么运行呢
猜测你的问题应该是一个工程有两个CPP文件,比如1.cpp,2.cpp,该如何运行。目前所有C的编译器都是默认从main()函数开始运行,所以只需要在你的一个CPP(比如是1.cpp)中写入main()函数,其他函数从main()函数中调用。其他函数可以写在1.cpp中,也可以写在2.cpp中,但写在2.cpp中时需要在2.h中声明各函数,同时在1.cpp中包含2.h。
7. 请问新装的编译器,编译时出现如下问题,怎么回事需要设置或安装什么Makefile is older than Makefile
.0发布了。目前,GCC可以用来编译C/C++、FORTRAN、java、OBJC、ADA等语言的程序,可根据需要选择安装支持的语言。GCC 3.4.0比以前版本更好地支持了C++标准。本文以在Redhat Linux上安装GCC3.4.0为例,介绍了GCC的安装过程。
安装之前,系统中必须要有cc或者gcc等编译器,并且是可用的,或者用环境变量CC指定系统上的编译器。如果系统上没有编译器,不能安装源代码形式的GCC 3.4.0。如果是这种情况,可以在网上找一个与你系统相适应的如RPM等二进制形式的GCC软件包来安装使用。本文介绍的是以源代码形式提供的GCC软件包的安装过程,软件包本身和其安装过程同样适用于其它Linux和Unix系统。
系统上原来的GCC编译器可能是把gcc等命令文件、库文件、头文件等分别存放到系统中的不同目录下的。与此不同,现在GCC建议我们将一个版本的GCC安装在一个单独的目录下。这样做的好处是将来不需要它的时候可以方便地删除整个目录即可(因为GCC没有uninstall功能);缺点是在安装完成后要做一些设置工作才能使编译器工作正常。在本文中我采用这个方案安装GCC 3.4.0,并且在安装完成后,仍然能够使用原来低版本的GCC编译器,即一个系统上可以同时存在并使用多个版本的GCC编译器。
按照本文提供的步骤和设置选项,即使以前没有安装过GCC,也可以在系统上安装上一个可工作的新版本的GCC编译器。
1. 下载
在GCC网站上()或者通过网上搜索可以查找到下载资源。目前GCC的最新版本为 3.4.0。可供下载的文件一般有两种形式:gcc-3.4.0.tar.gz和gcc-3.4.0.tar.bz2,只是压缩格式不一样,内容完全一致,下载其中一种即可。
2. 解压缩
根据压缩格式,选择下面相应的一种方式解包(以下的“%”表示命令行提示符):
% tar xzvf gcc-3.4.0.tar.gz
或者
% bzcat gcc-3.4.0.tar.bz2 | tar xvf -
新生成的gcc-3.4.0这个目录被称为源目录,用$表示它。以后在出现$的地方,应该用真实的路径来替换它。用pwd命令可以查看当前路径。
在$/INSTALL目录下有详细的GCC安装说明,可用浏览器打开index.html阅读。
3. 建立目标目录
目标目录(用$表示)是用来存放编译结果的地方。GCC建议编译后的文件不要放在源目录${srcdir]中(虽然这样做也可以),最好单独存放在另外一个目录中,而且不能是$的子目录。
例如,可以这样建立一个叫 gcc-build 的目标目录(与源目录$是同级目录):
% mkdir gcc-build
% cd gcc-build
以下的操作主要是在目标目录 $ 下进行。
4. 配置
配置的目的是决定将GCC编译器安装到什么地方($),支持什么语言以及指定其它一些选项等。其中,$不能与$或$目录相同。
配置是通过执行$下的configure来完成的。其命令格式为(记得用你的真实路径替换$):
% $/configure --prefix=$ [其它选项]
例如,如果想将GCC 3.4.0安装到/usr/local/gcc-3.4.0目录下,则$就表示这个路径。
在我的机器上,我是这样配置的:
% ../gcc-3.4.0/configure --prefix=/usr/local/gcc-3.4.0 --enable-threads=posix --disable-checking --enable--long-long --host=i386-redhat-linux --with-system-zlib --enable-languages=c,c++,java
将GCC安装在/usr/local/gcc-3.4.0目录下,支持C/C++和JAVA语言,其它选项参见GCC提供的帮助说明。
5. 编译
% make
这是一个漫长的过程。在我的机器上(P4-1.6),这个过程用了50多分钟。
6. 安装
执行下面的命令将编译好的库文件等拷贝到$目录中(根据你设定的路径,可能需要管理员的权限):
% make install
至此,GCC 3.4.0安装过程就完成了。
6. 其它设置
GCC 3.4.0的所有文件,包括命令文件(如gcc、g++)、库文件等都在$目录下分别存放,如命令文件放在bin目录下、库文件在lib下、头文件在include下等。由于命令文件和库文件所在的目录还没有包含在相应的搜索路径内,所以必须要作适当的设置之后编译器才能顺利地找到并使用它们。
6.1 gcc、g++、gcj的设置
要想使用GCC 3.4.0的gcc等命令,简单的方法就是把它的路径$/bin放在环境变量PATH中。我不用这种方式,而是用符号连接的方式实现,这样做的好处是我仍然可以使用系统上原来的旧版本的GCC编译器。
首先,查看原来的gcc所在的路径:
% which gcc
在我的系统上,上述命令显示:/usr/bin/gcc。因此,原来的gcc命令在/usr/bin目录下。我们可以把GCC 3.4.0中的gcc、g++、gcj等命令在/usr/bin目录下分别做一个符号连接:
% cd /usr/bin
% ln -s $/bin/gcc gcc34
% ln -s $/bin/g++ g++34
% ln -s $/bin/gcj gcj34
这样,就可以分别使用gcc34、g++34、gcj34来调用GCC 3.4.0的gcc、g++、gcj完成对C、C++、JAVA程序的编译了。同时,仍然能够使用旧版本的GCC编译器中的gcc、g++等命令。
6.2 库路径的设置
将$/lib路径添加到环境变量LD_LIBRARY_PATH中,最好添加到系统的配置文件中,这样就不必要每次都设置这个环境变量了。
例如,如果GCC 3.4.0安装在/usr/local/gcc-3.4.0目录下,在RH Linux下可以直接在命令行上执行或者在文件/etc/profile中添加下面一句:
setenv LD_LIBRARY_PATH /usr/local/gcc-3.4.0/lib:$LD_LIBRARY_PATH
7. 测试
用新的编译命令(gcc34、g++34等)编译你以前的C、C++程序,检验新安装的GCC编译器是否能正常工作。
8. 根据需要,可以删除或者保留$和$目录。
8. 编译器和开发环境的关系
谈谈程序设计语言、编译器和开发环境之间的关系
许多初学者都会对这三个概念区分不清,应该说这三个概念是完全不同的,不能混为一谈。在本文中,我就尽我最大的能力来讲讲这三个概念以及他们之间的关系。
首先说程序设计语言,它同人类的自然语言一样也是一个语言,并且它是自然语言的一个子集。大家都知道自然语言是极其庞大和复杂的系统,具有很多不不确定性和不精确性,因此至今我们也没有办法对自然语言进行形式化的描述。程序设计语言只是自然语言的一个很小的子集,在计算机系统中,一切都是需要确定性和精确性的描述,因此程序设计语言也是极为规范的,在程序设计语言中,几乎就不允许存在不确定性和不精确性,也就是说不能存在文法的二义性。这样一个程序设计语言就可以通过一系列的产生式来进行形式化的描述,这一系列的产生式就被称为文法,语言就是由文法来定义的。从另外一个角度来说,一个程序设计语言,它仅仅是一个语言,它只对程序进行形式上的要求。或者说,程序设计语言对应于编程中的编码阶段。我们有必要对程序开发的三个阶段进行了解,程序开发从时间先后顺序上可以分为三个阶段:1.编码阶段,2.编译阶段,3.运行阶段。在编码阶段,我们使用的就是程序设计语言。语言除了定义了文法以外,其他的任何事情他都不做。当然一种语言也有很多种版本,比如 BASIC 语言,就有很多种版本,C语言也是如此。这里所讲的语言的版本与编译器的版本是不一样的。C语言的标准版本就是 ANSI C,如果初学者会提出这样的问题“C语言哪个更好?”,这样的问题反映出他们对语言与编译器之间的关系的认识的不足。如果从语言的角度来讲 VC 和 TC 是没有多大区别的,他们基本上都能支持 ANSI C。
再来看看编译器。编译器与语言的关系就是,翻译者与语言的关系。编译器就是一个翻译,他把使用某种语言书写的源程序,翻译成为等价的使用目标语言书写的目标程序。前面我们也说了,语言是一个抽象的概念,是由文法来定义的。唯一实在的东西,也就是定义语言的文法。在使用语言时,我们只能说,使用这种语言去书写一段程序。编译器则是能够将某种语言的源程序进行翻译,然后生成目标程序。我们通常会说,某个编译器支持了什么语言,也就是说这个编译器能识别并翻译这种语言。现在的C编译器,一般都是支持了 ANSI C 语言的,另外,编译器的设计者可能还会对 ANSI C 进行一定的扩充,而且各个编译器进行扩充功能都是不同的,因此可能就会出现一个编译器诞生以后,就会出现一个新的语言的现象。TC 和 VC 就分别对 ANSI C 进行了不同的扩充,比如在 TC 中有 far 等关键字,ANSI C 中是没有的,在 VC 中有内嵌汇编的语法 _asm,而在 TC 中则是使用 asm 关键字,这些内容在 ANSI C 中没有的。编译器的输入时源程序,而其输出则是目标程序。一般情况下,源程序是使用某种高级语言书写的,而目标程序则是某个特定机器的机器语言程序。另一方面,编译器除了提供编译功能,还会提供一些运行库。所谓运行库就是由一些事先写好的子程序所组成的子程序库。例如C语言中的 printf 函数,就是由C的运行库提供的。在 ANSI C 中定义了一些C语言的标准库函数,这些库函数是标准C必须具备的,也可以说这些库函数成为了 ANSI C 的一个部分。另外,不同的编译器还可以提供自己的,非标准的库给用户使用,在 TC 中的 Graphics 库,其实就是由 TC 提供的,它不是属于 ANSI C 的。简单的说,编译器是由编译程序和运行库组成的。在程序的编译阶段,就是使用编译器对源程序进行编译生成目标程序。
在程序的运行阶段则是在一个特定的平台上,由这个平台来执行编译生成的程序。Java 虚拟机是一个平台,DOS 和 Windows 也是平台,编译器的作用就是沟通源程序和程序的运行平台。源程序相对于一个运行平台来说是不可识别的,但当编译器将源程序编译成为这个平台所能够识别的目标语言以后,程序就可以在这个平台上运行了。
应该看到,编译器在其中起到了很重要的作用。我们现在可以明确一些概念了,程序设计语言只是语言,它本身很难说有什么好坏,这就如同说“汉语和英语哪个好”一样。使用某一种程序设计语言,我们可以书写自己的程序,从而向计算机表达自己希望完成的功能。这个阶段,我们称为编码阶段。编译器由编译程序和运行库组成,编译程序负责将源程序翻译成为目标程序,运行库提供了一些基本的子程序给程序编写者使用。我们可以说编译器是否支持某种语言,例如 TC 编译器是支持 ANSI C 的,而 GCC 则是一个能够支持多种语言的编译器。然而不同的编译器除了提供对某种语言的支持以外,还可能对该语言进行了某些功能扩充。编译器在对语言的支持上,差别都是不太大的,这是因为许多语言都制定了一个标准,例如 ANSI C。编译器的另外一个重要特性,就是对运行平台的支持。平台指的是一个程序运行所需要的所有软件和硬件的基础。编译器对运行平台的支持,是通过将源程序编译成为目标程序,以及编译器所提供的运行库来实现的。例如,TC只能将C源程序编译生成,使用 80x86 CPU,操作系统为 DOS 的 16bit DOS 程序。VC只能将C源程序编译生成 80x86 CPU、操作系统为 Windows 的 32bit Windows 程序。使用编译器对源程序进行编译被称为编译阶段,这个阶段编译程序将源程序编译为某个平台的目标代码。程序在具体的平台上运行时,被称为运行阶段。应该指出,在编码阶段使用到的是程序设计语言,以及编译器所提供的库函数,这个阶段产生的是源程序。在编译阶段使用的是源程序和编译器,这个阶段产生的是目标程序。在运行阶段使用到的是目标程序和运行平台,这个时候产生的是程序运行结果。
因此说讨论一个程序设计语言好坏没有多大意义,因为他们使用的场合不同,比如汇编语言和 Java 语言,要谈论这两个语言的好坏是没有实际意义的。而说“C语言哪个好”之类的话也是没有意义的,我想大家学的C也就是在 ANSI C 基础上的C,并且不同的C语言之间的差别是极小的。我们通常指的 TC、VC 都是指编译器,而不是语言。编译器能够支持一种或者多种的程序设计语言,TC 能够支持 ANSI C,VC 能够支持 ANSI C 和 ANSI C++,而 GCC 则是一个支持多语言的编译器。如果真要说 VC 比 TC 好,只能说 VC 编译器提供的库函数更多,并且 VC 能够支持的平台是 Windows,而 VC 编译出来的代码也都是 32bit 的。
在以上概念中纠缠了这么久,我也不再想多说了。再来看开发环境。为了能够方便程序设计者进行编码、调试等工作,编译器制造商在制作好一个编译器以后,都会提供一个集成开发环境(又称为IDE)。在这个 IDE 中,用户可以完成编码、编译、调试、运行的全部工作。并且在最新的IDE中,可能还会提供一个可视化的设计功能,可以方便用户进行程序界面的设计。例如 VB 等。另外一个方面,开发环境除了包括 IDE 以外,还包括了程序运行的平台。比如硬件是 IBM PC 兼容机,操作系统是 Windows 等。
可能,能讲的也就这么多了,感觉讲的并不是很好,不过我已经尽力了。有些东西是很难说清楚的,“只能意会不可言传”指的就是这个了。不要怪我讲的不好,还是自己用心去理解和体会吧。
9. visual c++中一个工程只能编一c程序吗
这个问题很简单,Visual C++中的一个工程只能编译一个程序,但是VC中有"工作区"的概念,一个"工作区"可以包含多个工程文件,一般大型的项目都是一个工作区配合多个工程文件的。
你把2个程序分到两个工程里就OK了
10. 问个c++的问题
可以做的啊~~刚学的C++基础编译出来的界面是DOS下的,感觉很不爽~
要编译出很好看的界面,你可以去看MFC
MFC,可视化编程,在C++的编译软件VC++里面就有~~~~
建议你学好了C++,再去看MFC,不然会碰到很多钉子~
以下为参考资料:
MFC,微软基础类(Microsoft Foundation Classes),实际上是微软提供的,用于在C++环境下编写应用程序的一个框架和引擎,VC++是WinDOS下开发人员使用的专业C++ SDK(SDK,Standard SoftWare Develop Kit,专业软件开发平台),MFC就是挂在它之上的一个辅助软件开发包,MFC作为与VC++血肉相连的部分(注意C++和VC++的区别:C++是一种程序设计语言,是一种大家都承认的软件编制的通用规范,而VC++只是一个编译器,或者说是一种编译器+源程序编辑器的IDE,WS,PlatForm,这跟Pascal和Delphi的关系一个道理,Pascal是Delphi的语言基础,Delphi使用Pascal规范来进行Win下应用程序的开发和编译,却不同于Basic语言和VB的关系,Basic语言在VB开发出来被应用的年代已经成了Basic语言的新规范,VB新加的Basic语言要素,如面向对象程序设计的要素,是一种性质上的飞跃,使VB既是一个IDE,又成长成一个新的程序设计语言),MFC同BC++集成的VCL一样是一个非外挂式的软件包,类库,只不过MFC类是微软为VC++专配的..
MFC是Win API与C++的结合,API,即微软提供的WinDOS下应用程序的编程语言接口,是一种软件编程的规范,但不是一种程序开发语言本身,可以允许用户使用各种各样的第三方(如我是一方,微软是一方,Borland就是第三方)的编程语言来进行对WinDOS下应用程序的开发,使这些被开发出来的应用程序能在WinDOS下运行,比如VB,VC++,Java,Dehpi编程语言函数本质上全部源于API,因此用它们开发出来的应用程序都能工作在WinOS的消息机制和绘图里,遵守WinDOS作为一个操作系统的内部实现,这其实也是一种必要,微软如果不提供API,这个世上对Win编程的工作就不会存在,微软的产品就会迅速从时尚变成垃圾,上面说到MFC是微软对API函数的专用C++封装,这种结合一方面让用户使用微软的专业C++ SDK来进行Win下应用程序的开发变得容易,因为MFC是对API的封装,微软做了大量的工作,隐藏了好多程序开发人员在Win下用C++ & MFC编制软件时的大量内节,如应用程序实现消息的处理,设备环境绘图,这种结合是以方便为目的的,必定要付出一定代价(这是微软的一向作风),因此就造成了MFC对类封装中的一定程度的的冗余和迂回,但这是可以接受的..
来自:http://ke..com/view/10918.html?wtp=tt
要找这些资料,网上有很多~