seo网站优化推广怎么样,ckeditor导入wordpress,杭州网站建设 网络服务,旅行社酒店分销平台这是群友分享的方法#xff0c;这里只是作为记录和分享。
有了这个功能#xff0c;可以很方便的拷贝一下C或者C代码直接用到FB上。
既然是混合C语言编译#xff0c;当然得有C的代码。比如随便去网上找两个排序#xff1a;冒泡排序和选择排序#xff0c;代码如下#xf…这是群友分享的方法这里只是作为记录和分享。
有了这个功能可以很方便的拷贝一下C或者C代码直接用到FB上。
既然是混合C语言编译当然得有C的代码。比如随便去网上找两个排序冒泡排序和选择排序代码如下
1、冒泡排序存储为BubbleSort.c
void BubbleSort(int arr[],int size)
{int j,i,tem;for (i 0; i size-1;i )//size-1是因为不用与自己比较所以比的数就少一个{int count 0;for (j 0; j size-1 - i; j) //size-1-i是因为每一趟就会少一个数比较{if (arr[j] arr[j1])//这是升序排法前一个数和后一个数比较如果前数大则与后一个数换位置{tem arr[j];arr[j] arr[j1];arr[j1] tem;count 1;}}if (count 0) //如果某一趟没有交换位置则说明已经排好序直接退出循环break; }
}
2、选择排序存储为SelectSort.c
void SelectSort(int arr[],int size)
{int i 0;for (i 0; i size-1; i){int min i;int j 0;for (j i1; j size; j){if (arr[j] arr[min]){min j;}}//交换两个数if(i ! min){int temp arr[i];arr[i] arr[min];arr[min] temp;}}
}3、包含全局变量和头文件引用的C程序存储为Testfunc.c
#include stdio.hint GlobalVar 666666; //全局变量
int PrintVar 0;void Testfunc(void) //测试函数
{printf(the global variable is:%d,PrintVar); //调用printf函数
}
然后就是设置编译方式和声明函数了。
1、需要设置GCC编译器如果使用GAS编译是不行的。32位的FB默认使用GAS编译
如果是使用VFB来编译程序则需要在内核模块的程序起始块里来设置这里设置的代码会放到所有代码的最前部这是我们需要的。用#cmdline来声明命令主要是比较方便也可以在IDE里的工程属性里的附加编译选项里设置。-gen gcc就是指定编译器为GCC编译。
#cmdline -gen gcc 设置编译器为GCC编译
2、需要包含前面的C代码文件。需要用-Wc命令来将我们需要的命令传递给GCC编译器命令间用逗号“,”分隔。用-include 指定你需要包含的C文件后面是文件名我是放在编译路径下VFB的release文件下这里有BubbleSort.c和SelectSort.c。
#cmdline -Wc -include,BubbleSort.c 包含BubbleSort.c文件给GCC编译
#cmdline -Wc -include,SelectSort.c 包含SelectSort.c文件给GCC编译
3、如果C文件里有使用头文件或者其他引用的文件则需要声明头文件的路径否则会编译失败。我直接拷贝了DevC目录下的头文件文件名include到release里这样方便寻找。声明如下
#cmdline -Wc -include,Testfunc.c,-I..\release\include 指定头文件搜索目录
4、FB里对C全局变量声明方式
全局变量需要用【Extern 变量名 Alias C里的变量名 as 数据类型】来声明变量名可以与C的变量名不一样也可以一样。例如C里的GlobalVar改成gvar完全没问题。
Extern gvar Alias GlobalVar As Long
Extern PrintVar Alias PrintVar As Long
5、FB里的C函数的声明
5.1、使用Extern C ... End Extern块来声明函数同时在其中使用Declare关键字来声明函数。
5.2、一般来说C里的返回值是void的FB里使用sub不是void的使用function。
5.3、C里的数组在FB里需要声明指针不能使用FB的数组直接声明FB的数组是一个类型结构与C的数组有区别。
5.4、如果不需要修改函数名可以直接对应C函数转换。如果需要修改函数名则需要用Alias来声明规则与全局变量一样。代码如下
Extern C
//冒泡排序
//C定义 void BubbleSort(int arr[],int size)
Declare Sub BubbleSort(arr As Long Ptr,ByVal nsize As Long) c的数组得用指针不能用FB的数组直接传过去
//选择排序
//C定义 void SelectSort(int arr[],int size)
Declare Sub SelectSort(arr As Long Ptr, ByVal nsize As Long) c的数组得用指针不能用FB的数组直接传过去
--------------------------------------------------------------------
C定义 void Testfunc(void)
Declare Sub PrintGlobalVar Alias Testfunc() C里的函数名为Testfunc如果有需要比如有冲突换一个名字可以用AliasEnd Extern
使用时与FB函数和变量一样具体例子如下
FB与C混合编译