Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >X#(XSharp)中的调用约定

X#(XSharp)中的调用约定

作者头像
firstxinjie
发布于 2025-03-27 06:20:01
发布于 2025-03-27 06:20:01
4800
代码可运行
举报
文章被收录于专栏:X#(XSharp)X#(XSharp)
运行总次数:0
代码可运行

第一次接触“调用约定”这个概念居然是写了 N 年 VFP 程序之后。

X# 的官方文档中,对调用约定的解释是这样的:调用约定是非托管世界的东西。它们描述了调用函数或方法时应如何传递参数,还描述了被调用函数/方法返回时由谁负责调整堆栈。

首先要理解什么是托管和非托管。

AI 是这样回答大致是这样的:托管是由 .NET运行时(CLR)管理的;非托管是直接运行在操作系统上的。

对于 X# 来说,“对于 “正常的” 托管代码,你实际上只需要处理两种调用约定:1. 对于未类型方法,编译器使用 CLIPPER 调用约定;2.对于类型化方法,编译器在 STRICT 和 PASCAL 之间没有区别。它们都产生相同的代码”

好吧,至少我要理解什么是 Clipper 调用约定,什么是 Strict 调用约定,什么是 Pascal 调用约定。

按照《第二章 X# 的历史渊源及其理念》的内容和 X# 中文档的说明,Clipper 调用约定“是 Xbase 世界中的一种特殊调用约定,在 Xbase 世界中,函数的参数(从技术上讲)都是可选的,而且可以传递比声明参数更多的值。”。至于这个名称的由来,我猜测大概是由此而来:1985 年“Nantucket 发布第一款 dBase 编译器 Clipper 1.0”。

VFP 是 Xbase 世界的一员,因此,按照概念描述和在 VFP 中的经验,所有和 VFP 语法一致的函数/方法都使用的是 Clipper 调用约定,就像下面的这样:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Function foo(a, b, c)
	* 一些逻辑代码
Endfunc

函数没有返回类型,参数也未指定类型。这符合 VFP9 帮助中对 Function 命令的第一种语法定义。

但是,其中还有另一种语法定义:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
FUNCTION FunctionName( [ parameter1 [ AS para1type ][ ,parameter2 [ AS para2type ] ],...] ) [ AS returntype ]
      Commands 
   [ RETURN [ eExpression ] ]
[ENDFUNC]

在 VFP 中,这种语法可能是为了使 VFP 看上去像是强类型语言,但是在 X# 中,按照官方文档的描述,这应该算是使用了 Strict 调用约定。因此,Clipper 调用约定和 Strict 调用约定的区别跃然纸上。

对于 Pascal 调用约定,X# 的官方文档是这样描述的:这种调用约定在 Pascal 的世界里被广泛使用。它看起来很像 STRICT 调用约定......在 C/C++ 中,这被称为 __stdcall 调用约定。Windows API 中的大多数函数都使用这种调用约定。

至此,对这个概念基本上是了解了。如果在构建项目时看到与此相关的错误信息,也知道该如何修改代码了:)

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-03-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 xinjie的VFP 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
《JavaSE》---8.<基础语法(Java方法的定义详解&方法的递归)>
创建一个方法,我们首先是去定义这个方法的访问修饰符。现阶段直接使用public static 固定搭配(public static意思就是这个方法可以被所有类访问,并且这个方法是属于类的,而不是实例。可以不创建对象的实例而直接被类调用。),其实修饰符还有许多。如下表格。大家简单了解即可。随着学习的深入。我们会一一理解。
用户11288958
2024/09/24
1500
《JavaSE》---8.<基础语法(Java方法的定义详解&方法的递归)>
知识改变命运 第五集:方法的使用
方法就是一个代码片段. 类似于 C 语言中的 “函数”。方法存在的意义(不要背, 重在体会):
用户11319080
2024/10/17
1070
知识改变命运 第五集:方法的使用
【Java探索之旅】方法重载 递归
假设现在我们需要求两个数的和,要求根据数据的类型返回相应的返回值。那么就需要写一个整数和的方法、一个浮点数和的方法。如果类似的要求很多,你取名字都是一件极其麻烦的事情,这里就需要用到方法的重载了。
屿小夏
2024/04/18
820
【Java探索之旅】方法重载 递归
Java方法的详解和使用
Java中方法形参就相当于sum函数中的自变量n,用来接收sum函数在调用时传递的值的。形参的名字可以随意取,对方法都没有任何影响,形参只是方法定义时需要借助的一个变量,用来保存方法在调用时传递过来的值。
用户11070251
2024/04/11
1220
Java方法的详解和使用
Java方法的基本用法
推荐一个网站给想要了解或者学习人工智能知识的读者,这个网站里内容讲解通俗易懂且风趣幽默,对我帮助很大。我想与大家分享这个宝藏网站,请点击下方链接查看。 https://www.captainbed.cn/f1
鲜于言悠
2024/05/24
780
Java方法的基本用法
Java 方法详解
设计方法的原则:方法的本意是功能块,就是实现某个功能的语句块的集合。我们设计方法的时候,最好保持方法的原子性,就是一个方法只完成1个功能,这样利于我们后期的扩展。
星姮十织
2021/12/25
5040
【Java】方法的使用!!!
喜欢做梦
2024/11/25
910
【Java】方法的使用!!!
Java方法的重载
Java方法的重载是指同一个类中可以有多个同名方法,但这些方法的参数列表(参数类型、参数个数或参数顺序)必须不同,以便在调用时能够根据参数列表区分具体调用哪个方法。
鲜于言悠
2024/05/24
1030
Java方法的重载
Java基础知识(七)方法的定义,形参,实参,
语句块(有时叫做复合语句),是用花括号扩起的任意数量的简单Java语句。块确定了局部变量的作用域。块中的程序代码,作为一个整体,是要被一起执行的。块可以被嵌套在另一个块中,但是不能在两个嵌套的块内声明同名的变量。语句块可以使用外部的变量,而外部不能使用语句块中定义的变量,因为语句块中定义的变量作用域只限于语句块。
徐建国
2021/08/03
9570
Java基础知识(七)方法的定义,形参,实参,
【Java SE】方法的使用
【方法调用过程】 调用方法—>传递参数—>找到方法地址—>执行被调方法的方法体—>被调方法结束返回—>回到主调方法继续往下执行
xxxflower
2023/04/16
3180
【Java SE】方法的使用
方法的使用
方法跟函数是几乎一样的。所以语法是大差不差的。就多了一点东西。之前我们在c语言里已经很详细讲过了函数。这里就简便的讲一下。
E绵绵
2024/04/08
960
方法的使用
Java学习笔记之Java方法
方法(method)是将具有独立功能的代码块组织成为一个整体,使其具有特俗功能的代码集。
Jetpropelledsnake21
2021/11/16
2450
Java学习笔记之Java方法
21天学习挑战赛之Java方法
​ 方法(method)是将具有独立功能的代码块组织成为一个整体,使其具有特殊功能的代码集
楠羽
2022/11/18
3100
【愚公系列】2021年12月 Java教学课程 19-方法
​ 方法(method)是将具有独立功能的代码块组织成为一个整体,使其具有特殊功能的代码集
愚公搬代码
2022/01/04
2770
Java方法
方法中的返回值有两种情况,即有返回值和无返回值,如果定义方法时有返回值类型,就需要返回相对应的数据类型
闲花手札
2021/08/24
7660
Java的学习笔记(04)方法
Java方法01 方法是语句的集合,执行一个功能。方法再程序中被创建,再其他地方被引用
卢衍飞
2023/02/13
1890
【05】JAVASE-方法讲解【从零开始学JAVA】
Java 是第一大编程语言和开发平台。它有助于企业降低成本、缩短开发周期、推动创新以及改善应用服务。如今全球有数百万开发人员运行着超过 51 亿个 Java 虚拟机,Java 仍是企业和开发人员的首选开发平台。
用户4919348
2024/05/25
460
【05】JAVASE-方法讲解【从零开始学JAVA】
二、方法【黑马JavaSE笔记】
注意:方法调用时,参数的数量与类型必须与方法定义中的设置相匹配,否则程序将会报错。
啵啵鱼
2022/11/23
4210
【趣学程序】java中的方法
java中的方法 什么是方法(函数) 方法是一组为了实现特定功能的代码块的集合。 方法在语法上的功能主要有以下两个 结构化代码 将代码按照功能进行组织,使代码的结构比较清晰,容易阅读和修改,也就是程序的可维护性强。 减少代码重复 一个固定的功能,可能会在程序中多次使用,在使用时只需要调用写好的方法,而不用重复书写对应的功能代码。 注意: 逻辑严谨 方法实现的一个完整的功能,所以在书写时要考虑到各种可能的情况,并对每种情况做出恰当的处理。 通用性强(可重复利用) 方法实现的是一种功
趣学程序-shaofeer
2019/07/27
5050
JAVA17/JAVA21方法精讲
用户9184480
2024/12/13
980
JAVA17/JAVA21方法精讲
相关推荐
《JavaSE》---8.<基础语法(Java方法的定义详解&方法的递归)>
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验