
cygwin我没用过,大概是别人给套了个可视化编程界面了。
1.你运行cygwin这个软件,然后“文件/打开/”把你准备好的C源代码加载到这个软件中闷掘。(就好比我们平时用word时,先运行word软件,然后把你的文档加如入并进行编辑。)
2.在软件界面上(一般在:工具栏)找一个功能为“运行”的按纽。
准备知识:
写一个程序一般分以下步骤:
1.编辑(就是把你的源代码写出来,你可以穗罩饥用“记事本”写,当然一般编程工具cygwin也会提供编辑环境)
2.编译+连接(你只要点个按纽就行,这个任务完全由cygwin完成,你不必管它怎么完成这个任务的。
==============================
那么,编译是什么意思呢?
==============
由于你是初学者,我只能用尽可能通俗的话给你解释一下,这种解释是不够准确的。因为计算机本身只认识二进制指令,就是0/1的序猜返列,每个0/1的序列都在计算机设计时,就赋予了一定的含义。比如:设计师可以把0001表示作个加法,用0000表示作个减法。但是如果人们用0/1的序列来表达我们的需求,显然非常麻烦。于是,后来一些科学家就发明了一种近似英语的计算机语言C,很明显如果要让计算机也明白C表达的意思,我们就必须把C翻译成0/1的序列。那么,编译就可以理解为“翻译”。
[打个比方1]这就好比,你是个中国人,你只会说中文,计算机是个美国人,它只会说英语。你要请计算机给你做件事,你可以用中文写好你的要求,然后请个翻译,把你的要求翻译成英语。)
======
调试是什么呢?
=====
调试分两个层面:(沿用上面的比方1)
1.语法层
你用中文表达你的要求时,可能你的用语不够规范,或写了错别字,使得你
请的翻译不理解你的意思,没办法翻译下去。这时,这个翻译就会通知你说:“对不起,你这个字是不是写错了”。于是,你就“调整调整,修改修改,才试一试”(“调试”由此得名),然后才请翻译进行翻译。
2.语意层
由于你的疏忽,你把要求表达错了。举个离谱点的例子:你本意是打算请计算机帮你买张去北京的火车票的,结果你不小心,写成了买张去上海的火车票。出现这个错误,翻译没方法告诉你,只有等计算机把一张上海的车票给你,你才意识到,于是你重新调试,才执行。
cygwin是linux仿真环境你在cygwin里面开发windows程序属于交叉编译cygwin调用了cygwin.dll库来支持linux下gcc的函数对windows的支持。如果不用哪春cygwin.dll,就应该在编译参数中加上 -mno-cygwin ,意思是使用mingw的库来编译。由此产生的弊端是一些linux中的函数不被支持。
如果要单纯的移植,还是带cygwin.dll一起发布好一点。
但是这种方法也不能保证全部可移植。
C语言能不能移植,还与linux和windows中C库的实现不同有关。
最简单的例子,橘缓颂他们的基础数据类型的表示方法可能不同,在linux中用4个字节表示的,linux中说不定是8个字节。由此你函数的输出结果也就圆郑不同。
因此你要做的,就是一点点的翻看两个系统的定义,确保他们的实现一样、不会产生二意性。
另外库函数的返回也可能不一样,也必须排除不同的返回值。
[自己知岩租的程序无法显示UTF-8字符]我用MinGW gcc 4.4.0编了个简单程序,printf char[]字符串到stdout,源代码用不带BOM的UTF-8保存,用WinHex查看编译后程序,里面的字符串也是UTF-8的,在cmd或Cygwin bash下运行,均按GBK解码字符,结果在ASCII之外的字符都是错误的。
[Cygwin中的程序能显示UTF-8字符]
但奇怪的是,我发现Cygwin自身的一些软件包都采用UTF-8的环境,比如:我的程序myapp.exe的UTF-8输出字符串本来是不能正确显示的,但如果将程序输出赋给环境变量:
VAR=`./myapp.exe`
然后:echo $VAR,这时就能在控制台显示正确的UTF-8字符串。
为了验证VAR确实保存UTF-8字符串,我echo $VAR >out.txt,检查out.txt也是UTF-8编码的。
另外:
echo "字符串" >out.txt,out.txt也是UTF-8编码的。
cat out.txt,当out.txt为GBK时不能正确显示;当out.txt为UTF-8时可以正确显示,并且cat out.txt >out2.txt,out2.txt也是UTF-8编码的。
[Linux下的UTF-8字符输出实验]
为了搞清楚,我将源程序文件原封不动的拷贝到Debian下,Linux gcc 4.3.0编译,用od查看编译后程序,里面的字符串也是UTF-8的。程序在gnome-terminal下的bash中执行,能够正确显示字符串。原先以为这是我将bash环境的LC_XXX设置为UTF-8的原因,但是我用export LANG="zh_CN.GBK"后,程序还是能正搭兆确显示字符串,最后发现是gnome-terminal的字符编码影响了程序输出字符串的显示:如果将gnome-terminal的字符编码设为GBK,就则会显示出错。
[怎样在Cygwin下显示UTF-8字符]
我在Cygwin bash下用export LANG="zh_CN.UTF-8",但还是无法正确显示自己程序输出的UTF-8字符,于是我想是不是显示字符串和bash的locale设定没关系,而和下层的控制台设备的活动字符编码有关。
对于显示UTF-8编码的字符串,大家有什么建议和方法呢?
为什么Cygwin自己的程序,例如:cat、echo,它们输出的UTF-8字符串就能正确显示呢?实际上Cygwin的cat在bash、cmd上都能正确显示UTF-8字符串。
P.S.
其实有一个不很好的办法,让bash、cmd显示UTF-8字符串:
先chcp.com 65001将控制台活动代码页改为UTF-8的,然后在枣猜控制台的属性->字体中选择合适的字体,就能显示UTF-8字符,但是可选的字体似乎只有一个:Lucida Console,用这个字体第一次显示输出的字符串时,字符串只显示半截,然后将控制台窗口遮蔽到其它窗口后,再d到最前时,整个字符串才显示出来,这个问题似乎和控制台呈现字体的图形 *** 作有关。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)