tcc -f87 怎么个用法

自己动手写ide_c语言吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:465,553贴子:
自己动手写ide收藏
c语言一般需要4-8周,就可以掌握.4个月=两年的工作经验,月薪过万.c语言,达内14年专业IT培训,免费试听课程,名师授课,手把手传教.
下面我们将自己动手写个ide
不是编译器)
以下为全程现场直播(吧主别删)先选好需要哪些编译器
由于我还会一些汇编
所以带上了汇编编译器
不会的直接略过就好
下面列一下编译器
头文件什么的在这里不说了
坚决拥护小陈同志
首先是程序编辑
我们有两种方法
使用创建文件的方式创建一个。c
保存到。。。。 然后
用ms dos 打开
不过这一项不符合我的作风(hosour的作风就是直接拿来别人的
然后看都不看就复制 要不就一点也不用)2 用现有的编辑器
(下面只出示截图
要资源的留邮箱 不要新开楼)下面是截图
第一个方法同样截图
代码后发(其实ms dos可以完全实现
具体搜索 如何新建文件)lz我搜索了一下
先参见以下ms dos命令表维 百科
地址发不出来
熟悉一下各编译器的用法
先说明一下
在system命令中
直接输入的话
可以在环境变量中打开(当然也包括自带目录的)
比如我生成在e:
默认打开 e:\111.exe
Turbo C 2.0编连命令tcc.exe的用法
Turbo C 2.0编译连接程序TCC.EXE的用法简介
⒈首先要确保名为turboc.CFG的文件与TCC.EXE位于同一
目录下如同在C:/TC目录下。turboc.CFG的全部内容是
-IC:/TC/INCLUDE
-LC:/TC/LIB
它的作用是告诉TCC.EXE,.h文件和.lib文件在哪里。
⒉最简单的情形——当只需要编译连接一个C源文件
设含主函数main()的文件名为mfile.c(下同)
则用以下命令之一可使编译、连接"一步到位":
① tcc -f87 mfile.c &回车&
② tcc mfile.c &回车&
③ tcc mfile
命令①的效果优于命令②③因为 -f87 启动了协处理器
从而使最终得到的可执行文件mfile.exe代码短,速度快
命令②③的效果是用软件仿真协处理器的8087指令代码
既长速度且慢。当然如果机器上没有协处理器就只能采
用命令②或③了。若源文件的扩展名是c,则只须输入文
件的主名,小数点和'c'一并省略,故命令②③效果相同 【注】如果C源文件的扩展名不是c,则又分两种情况:
若无扩展名(例如:仅有主名mfile)则编译连接命令应为
tcc -f87 mfile.
别忘了末尾那个小数点!
若有扩展名(例如:mfile.cpp)则编译连接命令应为
tcc -f87 mfile.cpp &回车&
⒊较复杂的情形——数个C源文件编译后连接为一个程序
设除了源文件mfile.c外,还有1.sub和2.fun两个源文件
则此时"一步到位"的既编译又连接的命令如下:
tcc [-f87]
2.fun &回车&
以上含方括号[]的项表示可选择项(下同)。该命令的效
果是顺序编译这些C源文件因而先后生成以下目标文件
mfile.obj,1.obj,2.obj 随后连接并生成 mfile.exe
换言之以上命令的效果等价于下面所列命令序列的效果
tcc [-f87]
2.obj &回车&
应当指出:-f87 开关对于编译不起作用,但在连接阶段
将引导连接器TLINK.EXE与库文件 C:/TC/LIB/FP87.LIB
连接而不是缺省时的模拟库文件 C:/TC/LIB/EMU.LIB。
⒋更复杂的情形——C主文件和汇编模块连接为一个程序
设除源文件mfile.c外,还有汇编模块sub.asm和fun.asm
此时"一步到位"的既编译、汇编又连接的命令如下:
tcc [-f87] -B mfile[.c] sub.asm fun.asm &回车&
以上命令的效果等价于下面所列命令序列的效果:
tasm -Mx sub[.asm]
tasm -Mx fun[.asm]
tcc [-f87]
fun.obj &回车&
⒌内存模式——Tiny,Small,Compact,Medium,Lagre,Huge
对应的开关是 -mt, -ms(缺省), -mc, -mm, -ml, -mh
注意该开关对于编译和对于连接都是有意义的。例如:
-ml mfile[.c]
等价于这样2条命令:
-ml -c mfile[.c] &回车&
mfile.obj &回车&
命令①中的 -ml 告诉编译器:代码和数据都是"远"的。
命令②中的 -ml 告诉连接器:连接MATHL.LIB和CL.LIB
⒍混合模式编程。例如:总体上是SMALL模式,但希望调用
按LARGE模式编写的函数。这是可以做到的,关键在函数
声明语句要强调代码和数据的 far 属性。 有这样一个
具体例子。在MS-Fortran4.0的库LLIBFR7.LIB中有个名
为CIXTOMX.OBJ的模块,其中定义了4个"远"函数。用C
语言编程调用这4个函数的关键是正确的函数原型声明 extern void far fmsbintoieee(float
far*,float
far*); extern void far dmsbintoieee(double far*,double far*); extern void far fieeetomsbin(float
far*,float
far*); extern void far dieeetomsbin(double far*,double far*);
这样声明后,即使用 -ms 进行编译连接也能正常运行。
完整的程序见 D:/FOR4.0/ 目录下的
MS.C,CIXTOMX.OBJ,IXTOMX.OBJ,MS.EXE,ML.C,ML.EXE。
⒎连接阶段如何用TLINK.EXE完成。对于
fun.obj &回车&
在缺省的SMALL模式下也可以用以下命令实现连接: TLINK c0S mfile sub fun,mfile,nul,maths fp87 cs &回车&
fun.obj &回车&
则相当于执行下列命令: TLINK c0L mfile sub fun,mfile,nul,maths emu cs &回车&
其中启动代码即C的初始化程序C0S.OBJ或C0L.OBJ可以
在C:/TC/LIB/下找到,它们的源程序在C:/TC/STARTUP/
目录下——该目录中的MAIN.C程序也值得关注—————————————————————————————————————————————++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++—————————————————————————————————————————————==========================================================================================—————————————————————————————————————————————------------------------------------------------------------------------------------------
  (5)编写第一个汇编语言程序: hello.asm  在没有编写程序之前,我们先在d:盘上建立一个名叫myasm的目录,(不会使用DOS指令可以通过Windows的资源管理器创建),这个目录就作为我们存放汇编语言开发项目的根目录,在该目录下再创建一个名为999的目录,这个目录就是我们放第一个汇编语言源代码文件hello.asm的目录。  masm32不是一个功能完善的集成开发环境(即IDE),我用过的比较好点的集成开发环境是RadASM,但限于篇幅本文不介绍它。不管怎样,汇编语言源代码的编写总是需要借助文本编辑器的。文本编辑器有多种,其他我们暂都不用,有机会再说,现在我们就因陋就简,使用Windows的记事本。请打开记事本,输入下面的内容:stack segment stackbyte 64 dup(0)stack endsdata segmentmsg byte 'hello world!$'data endscode segmentassume cs:code,ss:stack,ds:datastart:mov ax,datamov ds,axmov dx,offset msgmov ah,9int 21hmov ax,4c00hint 21hcode endsend start  编辑完成后,将其保存名为hello.asm的文件,放在d:\myasm\999目录下。这就是我们编写的第一个汇编语言源程序。  (6)将hello.asm制作成可执行文件  请回到控制台窗口,输入以下指令:  cd d:\myasm\999 回车 (注:将当前目录切换到d:\myasm\999)  dir 回车 (注:查看当前目录下都有什么子目录和文件)你应该从控制台窗口看到hello.asm文件在列表中。好,一切正常。  我们现在要汇编hello.asm然后连接。在控制台窗口输入以下指令:  ml.exe /c hello.asm 回车 (注:此步为汇编)  hello.asm中的内容如果无错误,您会在控制台窗口看到下面的信息:D:\myasm\999&ml /c hello.asmMicrosoft (R) Macro Assembler Version 6.14.8444Copyright (C) Microsoft Corp . All rights reserved.   Assembling: hello.asmD:\myasm\999&这说明编译成功。通过dir指令,你可以看到当前目录下多了一个hello.obj文件,这就是刚汇编生成的中间文件。  汇编成功了,第二步我们连接生成可执行文件。在命令行窗口输入:  link16 hell.obj,,,,, 回车 (注:5个逗号,用途以后有机会再说)  连接成功会在控制台窗口显示以下信息:D:\myasm\999&link16 hello.obj,,,,,Microsoft (R) Segmented Executable Linker Version 5.60.339 Dec 5 1994Copyright (C) Microsoft Corp . All rights reserved. D:\myasm\999&  通过在控制台窗口输入dir命令,可以看到当前目录下又多了一个名为 hello.exe的文件,它就是我们通过汇编、连接最终生成的可执行文件。在命令行窗口输入命令执行它:  hello.exe 回车 (注:执行hello.exe文件)  再看控制台窗口,会出现以下信息:D:\myasm\999&hello.exehello world!D:\myasm\999&这说明我们第一个入门程序开发成功了。  今天就到这里。  (fasmFan写于日)
 TASM是Borland公司推出的汇编编译器,也是一种使用很广泛的编译器,和MASM相比,TASM的升级没有这么频繁。TASM早在1.0版本就有了对80386处理器指令的完全支持(MASM要到5.0版本才支持80386指令),1989年推出的1.01版本修正了1.0版的一些错误;早期的版本还有TASM 3.0和TASM 4.0,其中4.0版是TASM系列编译器编写DOS程序使用最广泛的版本。  到目前为止,TASM的最后一个版本是5.0版,这个版本支持Win32编程,并单独为Win32编程附带有一整套的32位程序:32位的编译器TASM32.EXE、链接器TLINK32.EXE和资源编译器BRC32.EXE。与这些32位程序对应的16位工具在软件包中依然存在,文件名为TASM.EXE,TLINK.EXE和BRC.EXE等。  TASM 5.0命令行的使用方法是:  TASM32 [选项] 源文件名[,[目标文件名],[列表文件名],[索引文件名]][;]  在Win32编程时TASM的常用选项如下表所示。  选 项  简 介  /ml,/mx,/mu  对大小写是否敏感:ml=全部敏感,mx=全局变量大小写敏感,mu=不敏感,Win32编程中必须用ml选项  /m#  允许第#次编译扫描时可以向前引用,一般使用/m2  /i路径  设定include文字所在的路径  /l,/la  lst文件的格式:/l为正常格式,/la为扩充格式  /zi,/zd,/zn  符号调试信息的控制:/zi为全部,/zd为仅有行号,/zn为不产生调试信息  TASM和MASM之间的导入库和目标文件等不能通用,程序员无法用Microsoft的链接器来链接TASM产生的obj文件,反之亦然,这是因为TASM的库文件和obj文件一直是OMF格式,与Microsoft使用的COFF格式不兼容
我突然发现我好像不会用mingw32
我们不要她了
首先定义一个字符串(指针神马的随意吧)然后类char
key【50】;gets(key);system(key);system()\\这里要用到把两个字符串粘在一起char nian(char *a,char *b) strcat(a, b
大家都知道tcc的用法是 tcc 文件名了
所以只要在字符串a处\n之前建个空格就行了(手好冷)
之前忘记说连接的事了
其实只要用一个连接器就好了(但是每个编译器里都自带)
对于大神应该怎么跳,如何才能跳好,如何才能跳出水平,跳出特色,跳出共c主义的时代感,我知道,我还有很多要向lz学习的
有了这些基础做铺垫
我们就可以开始设计控制台了假设程序编译器是qunimei.exems dos命令后直接加文件名好了
控制台命令n 路径
新建o 路径 打开(虽然是废话 但是不得不交代)cxxx 选用xxx编译器编译 默认为c编译器(这个命令为选择编译器
自动保存在c:\1.txt下作为表(随便说一下))mxxx
有些不同以上部分还可改做t
tasmc 当做c语言编译当前文件m l
开始用c写代码
手实在是冷啊
没办法打字了
所以有些部分简写 吧主别删#icnlude “stdio.h”#define xxxint key(char *p) \\判断输入key的函数{
if(==o) \\此处都为简写
char key[xxx];
while(i++,p!='\0')
key[i+1]='\0'
char a[xx]=qunimei\b; \\简写 有空格
strcat(a,key)system
(key);只有退出才return 0}余下同理}void main(){int i=-1;char key【xxx】
while(i++,gets(key),i=key(key))}
提示什么的文件打不开 massagebox()编译器的错误提示会转到控制台中
so 不用担心
界面什么的我是编不了了
所以我选用了VB其实我也才看了一会
楼主,咱别来这里中二了行不。如果想发技术贴请凭自己本事原创,别七拼八凑弄些狗皮膏药出来恶心人。再次给你个限期,晚上回去的时候要是你还没说出个所以然来,后果你也明白。
下面把 int key(*p)的内容补全一下
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或udp 超时设置(select函数的一种用法) - liang_87 - 博客园
随笔 - 12, 文章 - 1, 评论 - 3, 引用 - 0
最近项目中,需要编写一个udp接收程序。
传统的recvfrom是阻塞进行的,即调用recvfrom之后程序就会阻塞,等待数据包的到来,如果没有数据包,程序就永远等待。
在很多场景中,我们需要设置超时参数,如果该套接口超时之后仍然没有数据包到来,那么就直接返回。
socket编程中这样的超时机制可以使用select和recvfrom这两个函数实现
实现代码如下
1 #define RECV_LOOP_COUNT 100
2 int recv_within_time(int fd, char *buf, size_t buf_n,struct sockaddr* addr,socklen_t *len,unsigned int sec,unsigned usec)
unsigned int n=0;
for(i=0;i&RECV_LOOP_COUNT;i++)
FD_ZERO(&readfds);
FD_SET(fd,&readfds);
tv.tv_sec=
tv.tv_usec=
select(fd+1,&readfds,NULL,NULL,&tv);
if(FD_ISSET(fd,&readfds))
if((n=recvfrom(fd,buf,buf_n,0,addr,len))&=0)
return -1;
其中关键代码是第10行到第17行,
第10行将集合readfds清零,
第11行将我们关注的sock加入集合readfds中(置fd对应的bit为1),
第12和13行设置超时参数,
第14行以非阻塞的方式调用select,如果tv时间内有数据则返回并设置readfds中fd对应的bit位为1,如果tv时间内没有数据则返回并设置readfds中对应的bit位为0;
第15行FD_ISSET测试readfds中fd位有没有置1,如果置一则返回成功,否则失败
这里要强调两点:
第一:如果tv时间内没有数据到来,你还想继续等待N次,那么一定要注意重新设置readfds,因为它已经被select破坏了,如果不重新设置的话,你的select语句会返回-1,strerr时会打印出参数设置出错,主要是由于readfds中全部为零,select不知道该去监视哪个sock;
第二:重复等待时不光要注意重新设置readfds,同时还要注意重新设置一下tv的值,因为select同时也破坏了tv的值(select在返回时会改变tv,改变的公式是tv=tv-等待的时间,所以如果tv时间内没有数据到达的话,select返回时tv会变成0)。
好的,到此你已经掌握了使用select和recvfrom 进行超时处理的全部知识了,赶紧打开编辑器,试试吧。以下是接收端的一个完整的程序,存为test_server.c,然后将 my_addr.sin_addr.s_addr=inet_addr("192.168.127.130");这行中的地址改为你自己的ip地址。
然后使用gcc -o test_server test_server.c
编译得到可执行程序test_server
#include &sys/types.h&
#include &sys/socket.h&
#include &unistd.h&
#include &netinet/in.h&
#include &arpa/inet.h&
#include &stdio.h&
#include &stdlib.h&
#include &errno.h&
#include &netdb.h&
#include &stdarg.h&
#include &string.h&
RECV_LOOP_COUNT 100
int main()
unsigned short expect_sn=0;
struct sockaddr_in my_
//struct sockaddr_in their_
if((sockfd=socket(AF_INET,SOCK_DGRAM,0))==-1)
printf("error in socket");
return -2;
my_addr.sin_family=AF_INET;
my_addr.sin_port=htons(9450);
my_addr.sin_addr.s_addr=inet_addr("192.168.127.130");
memset(my_addr.sin_zero,0,8);
addr_len = sizeof(struct sockaddr);
int re_flag=1;
int re_len=sizeof(int);
setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,&re_flag,re_len);
if(bind(sockfd,(const struct sockaddr *)&my_addr,addr_len)==-1)
printf("error in binding");
return -3;
unsigned int n=0;
char buf[1024];
FD_ZERO(&readfds);
FD_SET(sockfd,&readfds);
tv.tv_sec=3;
tv.tv_usec=10;
select(sockfd+1,&readfds,NULL,NULL,&tv);
if(FD_ISSET(sockfd,&readfds))
if((n=recvfrom(sockfd,buf,1024,0,&addr,&len))&=0)
printf("in time ,left time %d s ,%d usec\n",tv.tv_sec,tv.tv_usec);
printf("timeout ,left time %d s ,%d usec\n",tv.tv_sec,tv.tv_usec);
下面是一个发送端的测试程序:
保存为,test_client.c
然后修改 my_addr.sin_addr.s_addr=inet_addr("192.168.127.130");中的ip地址为你自己的ip地址,注意一定要和test_server.c中的ip地址一样。
然后使用gcc -o test_client test_client.c
编译成test_client可执行程序
#include &sys/types.h&
#include &sys/socket.h&
#include &unistd.h&
#include &netinet/in.h&
#include &arpa/inet.h&
#include &stdio.h&
#include &stdlib.h&
#include &errno.h&
#include &netdb.h&
#include &stdarg.h&
#include &string.h&
RECV_LOOP_COUNT 100
int main()
unsigned short expect_sn=0;
struct sockaddr_in my_
//struct sockaddr_in their_
if((sockfd=socket(AF_INET,SOCK_DGRAM,0))==-1)
printf("error in socket");
return -2;
my_addr.sin_family=AF_INET;
my_addr.sin_port=htons(9449);
my_addr.sin_addr.s_addr=inet_addr("192.168.127.130");
memset(my_addr.sin_zero,0,8);
addr_len = sizeof(struct sockaddr);
struct sockaddr_in send_
send_addr.sin_family=AF_INET;
send_addr.sin_addr.s_addr=inet_addr("192.168.127.130");
send_addr.sin_port=htons(9450);
memset(my_addr.sin_zero,0,8);
int sens_addr_len=sizeof(struct sockaddr_in);
char sends[]="hello";
char input[100];
scanf("%s",input);
sendto(sockfd,sends,6,0,(struct sockaddr*)&send_addr,sens_addr_len);
接着就是测试了
先运行服务端:
  ./test_server
然后运行客户端
  ./test_client
不在客户端输入数据时,服务端会不断打印超时信息,如果在服务端输入数据,然后回车之后服务端就会接到客户端的数据,就会打印非超时信息。
至此,我们的udp超时之旅就结束了,希望这篇文章对各位有帮助。渝f87y00车牌号怎么样_百度知道是时候在X东入个大F 87了,二选一该选哪把呢?_百度知道上海双旭电子有限公司
类型:经销商
联系人:张旭军
电话:021-1072...
传真:021-
联系我时,请说明是在中国仪表网上看到的,谢谢
主营产品:测厚仪,转速表,推拉力计,弹簧试验机,硬度计,噪音计,红外测温仪,测距仪,示波器,学生电源,万用表,钳形表,压力控制器
主营业务:
该商家其它产品
其它商家同类产品
金牌企业:
金牌企业:
金牌企业:
金牌企业:
金牌企业:
金牌企业:
金牌企业:
金牌企业:
金牌企业:
金牌企业:
金牌企业:
金牌企业:
金牌企业:
金牌企业:
金牌企业:
金牌企业:
金牌企业:
金牌企业:
金牌企业:
金牌企业:
金牌企业:
金牌企业:
金牌企业:
金牌企业:
金牌企业:
金牌企业:
金牌企业:
金牌企业:
金牌企业:
金牌企业:
金牌企业:
金牌企业:
金牌企业:
金牌企业:
金牌企业:
金牌企业:
金牌企业:
金牌企业:
金牌企业:
金牌企业:
金牌企业:
金牌企业:
金牌企业:
金牌企业:
金牌企业:
金牌企业:
金牌企业:
金牌企业:
金牌企业:
金牌企业:
金牌企业:
金牌企业:
金牌企业:
金牌企业:
金牌企业:
金牌企业:
金牌企业:
金牌企业:

我要回帖

 

随机推荐