当前位置: 首页 > news >正文

基于pspad和tcc的小巧编译器

小巧而纯粹的c语言编译器配置,整个IDE才10M左右大小。

一、编译器设定

1.     下载pspad/tcc

     Pspad: http://www.pspad.com

     Tcc : http://download.savannah.gnu.org/releases/tinycc/

     tcc-0.9.26-win32-bin.zip

2.以管理员身份运行pspad,设置编译选项

 

3.设置编译快捷键

设置—>首选项—>热键对应—>File—>编译

 

二.编译器测试

1.九九乘法表

/***Author:piaoxiang.zhang****/#include<stdio.h>void main(void){system("Title 九九乘法表");for(int i=1;i<10;i++){for(int j=1;j<=i;j++)printf("%d*%d=%-2d\t",i,j,i*j);   printf("\n");}system("pause\n");//程序窗口暂停,否则看不到输出。}

 

2.混合汇编

Tcc 支持AT&T格式的汇编代码。

/****Author:piaoxiang.zhang******/
#include <stdio.h>
#include <stdlib.h>
#define SWH_16(arg) swap_half_16_##arg
#define funVar(xxx) printf( "%s initial data is:\n", #xxx )
void swap_half_16_4th(uint16_t *data,int len)
{printf("\n%s start:\n",__func__) ;uint8_t *tmp=(uint8_t *) data;while(len>0){__asm( "movb  0(%%esi),%%ah\n\t""movb  1(%%esi),%%al\n\t""movw   %%ax,(%%esi)\n\t" :"+a"(data):"S"(tmp));tmp+=2;len--; }   
}
int main(int argv ,char **argc)
{uint16_t data[4]={0x1312,0x1512,0x1712,0x1812};SWH_16(4th)(data,4);    
printf("0x%X,0x%X,0x%X,0x%X\n",data[0],data[1],data[2],
data[3]); system("pause"); return 0 ;
}
 

 

3.     window 编程:

一个最简单的windows dialog

/*-------(c) Charles Petzold, 1998---------------------*/
#include <windows.h>
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,PSTR szCmdLine, int iCmdShow)
{MessageBox(NULL,TEXT("莫失莫忘,仙寿恒昌。\n不离不弃,芳龄永继。"),TEXT("石头记"),0);return 0 ;
}
 

 

4.     动态链接库。

以OpenGL 为例:

让编译器链接opengl 动态库

 
 

/********来源于网络,具体来源忘记了,sorry,稍有修改******/
#include <windows.h>
#include <gl/gl.h>LRESULT CALLBACK WndProc (HWND hWnd, UINT message,
WPARAM wParam, LPARAM lParam);
void EnableOpenGL (HWND hWnd, HDC *hDC, HGLRC *hRC);
void DisableOpenGL (HWND hWnd, HDC hDC, HGLRC hRC);int WINAPI WinMain (HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int iCmdShow)
{WNDCLASS wc;HWND hWnd;HDC hDC;HGLRC hRC;        MSG msg;BOOL bQuit = FALSE;float theta = 0.0f;wc.style = CS_OWNDC;wc.lpfnWndProc = WndProc;wc.cbClsExtra = 0;wc.cbWndExtra = 0;wc.hInstance = hInstance;wc.hIcon = LoadIcon (NULL, IDI_APPLICATION);wc.hCursor = LoadCursor (NULL, IDC_ARROW);wc.hbrBackground= (HBRUSH) GetStockObject (WHITE_BRUSH);wc.lpszMenuName = NULL;wc.lpszClassName = "GLSample";RegisterClass (&wc);hWnd=CreateWindow ("GLSample", "OpenGL Sample", WS_CAPTION | WS_POPUPWINDOW | WS_VISIBLE,300, 100, 512, 512,NULL, NULL, hInstance, NULL);EnableOpenGL (hWnd, &hDC, &hRC);while (!bQuit){  if (PeekMessage (&msg, NULL, 0, 0, PM_REMOVE)){if (msg.message == WM_QUIT)bQuit = TRUE;else{TranslateMessage (&msg);DispatchMessage (&msg);}}else{          glClearColor (0.0f, 0.0f, 0.0f, 0.0f);glClear (GL_COLOR_BUFFER_BIT);glPushMatrix ();glRotatef (theta, 0.0f, 0.0f, 1.0f);glBegin (GL_TRIANGLES);glColor3f (1.0f, 0.0f, 0.0f);   
glVertex2f (0.0f, 1.0f);glColor3f (0.0f, 1.0f, 0.0f);   
glVertex2f (0.87f, -0.5f);glColor3f (0.0f, 0.0f, 1.0f);   
glVertex2f (-0.87f, -0.5f);glEnd ();glPopMatrix ();SwapBuffers (hDC);theta += 1.0f;Sleep (1);}}DisableOpenGL (hWnd, hDC, hRC);DestroyWindow (hWnd);return msg.wParam;
}
LRESULT CALLBACK WndProc (HWND hWnd, UINT message,WPARAM wParam, LPARAM lParam)
{switch (message){case WM_CREATE:return 0;case WM_CLOSE:PostQuitMessage (0); return 0;case WM_DESTROY:return 0;case WM_KEYDOWN:switch (wParam){case VK_ESCAPE:PostQuitMessage(0);return 0;}return 0;default:return DefWindowProc(hWnd,message,wParam, lParam);}
}
void EnableOpenGL (HWND hWnd, HDC *hDC, HGLRC *hRC)
{PIXELFORMATDESCRIPTOR pfd;int iFormat;*hDC = GetDC (hWnd);ZeroMemory (&pfd, sizeof (pfd));pfd.nSize = sizeof (pfd);pfd.nVersion = 1;pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER;pfd.iPixelType = PFD_TYPE_RGBA;pfd.cColorBits = 24;pfd.cDepthBits = 16;pfd.iLayerType = PFD_MAIN_PLANE;iFormat = ChoosePixelFormat (*hDC, &pfd);SetPixelFormat (*hDC, iFormat, &pfd);*hRC = wglCreateContext( *hDC );wglMakeCurrent( *hDC, *hRC );
}
void DisableOpenGL (HWND hWnd, HDC hDC, HGLRC hRC)
{wglMakeCurrent (NULL, NULL);wglDeleteContext (hRC);ReleaseDC (hWnd, hDC);
}
 

 

5.     为程序添加图标。

需要用到Gcc 组件里的windres 程序。

 

准备以下文件

 

Music.rc

#include <windows.h>

#define IDI_SMLWIN 101

IDI_SMLWIN ICONDISCARDABLE "music_disk_SH.ico"

编译music.rc 得到music.res

/********Author:piaoxiang.zhang*******/
#include <windows.h>
int main()
{printf("愿你出走半生,归来仍是少年。\n携一人白首,择一城终老。\n");system("pause");return 0;
}

 

 

 

 


http://www.taodudu.cc/news/show-4919115.html

相关文章:

  • MySQL数据库子查询练习——EXISTS(存在)
  • Unity inputSystem 读取输入值的方法
  • 公路工程设计乙级资质申请材料清单详解
  • react脚手架创建项目,配置别名(alias)
  • 监控服务进程并自动重启 monitor
  • HTTP如何自动跳转到HTTPS,免费SSL证书如何获取
  • pspad c语言语法高亮,PSPad 下载地址以及设置语法高亮的方法 方便看代码
  • pspad 格式化php代码,PSPad editor编辑
  • 程序员的免费编辑器-PsPad(下)
  • PSPad自定义语法高亮,notepad++自定义语言格式
  • 滚动代码瀑布流代码效果国际站店铺装修代码生成器在线编辑器
  • “长沙银行杯”腾讯云启创新大赛——科技创新,原来还能这样玩?
  • 阿里国际站详情页上装修轮播功能代码怎么做动画gif图片步骤教程方法技巧
  • 怎么样装修好阿里巴巴国际站产品边框进度条环绕围绕效果动态gif制作代码全屏展示图片首页装修技巧方法教程视频全球旺铺阿里旺铺自定义内容装修 模板模块设置内容
  • 【边缘设备】基于RK3399核心板的nanoPC-T4 线刷桌面版系统
  • 大数据时代的历史机遇——产业变革与数据科学
  • 我的NO.旺
  • 旺铺入门版介绍
  • 旺铺入门版
  • 下载excel文件(旺铺助手)的方法
  • 基于pandas的电影评分差异分析
  • 蓝桥杯评分标准_第十一届蓝桥杯软件个人赛校内选拔赛评分标准和选拔标准
  • 计算机一级考if函数是哪套题,这个IF函数计算题必须要掌握! 考试难点!
  • es修改排序_ElasticSearch 评分排序
  • 2021/06/29计算机视觉期末复习笔记整理
  • 简答题文本自动评分
  • 五角星动态评分效果
  • 微信小游戏云开发数据库
  • mysql 游戏服务器设计_网络游戏服务器数据库设计和实现.doc
  • unity数据库
  • 怎样修改游戏服务器里的数据库,修改游戏服务器中的数据库
  • echart地图修改label标签位置
  • react中label标签关联的用法
  • html中调整lable位置右移,[转载]label标签右对齐
  • label标签和input标签之间的关系
  • java label 标签_Java标签(Label)