- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
编辑:感谢所有回复者。我应该在我原来的帖子中提到,我不允许更改这些函数的任何规范,因此使用断言和/或允许取消引用 NULL 的解决方案是不可能的。考虑到这一点,我认为要么使用函数指针,要么直接保留重复部分。为了清楚起见,这次我想避免使用函数指针。
原文:我试图在不失去清晰度的情况下避免代码重复。通常,在完成特定作业(大学 - 本科生)时,我会认识到这些函数 return 模式,但并不总是具有“出色的工作”解决方案。
你们中的任何人建议我应该用这三个 C 函数做什么(指向函数、宏等的指针),以相同的方式检查它们的一些参数,以使检查更加模块化(它应该更加模块化,对吧?)?
顺便说一句,这些是直接从硬件分配中获取的,因此它们的功能细节与我的问题无关,只涉及函数顶部的参数检查。
teamIsDuplicateCoachName(Team team, bool* isDuplicate) {
TeamResult result = TEAM_SUCCESS;
if (!team || !isDuplicate) {
result = TEAM_NULL_ARGUMENT;
} else if (teamEmpty(team)) {
result = TEAM_IS_EMPTY;
} else {
for (int i = 0; i < team->currentFormations; ++i) {
if (teamIsPlayerInFormation(team->formations[i], team->coach)) {
*isDuplicate = true;
break;
}
}
}
return result;
}
TeamResult teamGetWinRate(Team team, double* winRate) {
TeamResult result = TEAM_SUCCESS;
if (!team || !winRate) {
result = TEAM_NULL_ARGUMENT;
} else {
int wins = 0, games = 0;
for (int i = 0; i < team->currentFormations; ++i) {
Formation formation = team->formations[i];
if (formationIsComplete(formation)) {
games += formation->timesPlayed;
wins += formation->timesWon;
}
}
double win = ( games == 0 ) ? 0 : (double) wins / games;
assert(win >= 0 && win <= 1);
*winRate = win;
}
return result;
}
TeamResult teamGetNextIncompleteFormation(Team team, Formation* formation,
int* index) {
TeamResult result = TEAM_SUCCESS;
if (!team || !formation || !index) {
result = TEAM_NULL_ARGUMENT;
} else {
*formation = NULL; /* default result, will be returned if there are no incomplete formations */
for (int i = 0; i < team->currentFormations; ++i) {
Formation formationPtr = team->formations[i];
if (!formationIsComplete(formationPtr)) {
*formation = formationPtr;
*index = i;
break;
}
}
}
return result;
}
任何有关如何(具体地)避免代码重复的建议将不胜感激。
感谢您的宝贵时间! :)
最佳答案
将空值传递给这些函数似乎是一个编码错误。处理这种情况的主要方法有3种。
根据我的经验,3 通常是最好的方法。它添加了零额外代码,并且段错误通常与从 2 中获得的干净错误消息一样容易调试。但是,您会发现许多软件工程师更喜欢 2,这是一个品味问题。
您的代码(模式 1)有一些明显的缺点。首先,它添加了无法优化的额外代码。其次,更多的代码意味着更多的复杂性。第三,尚不清楚这些函数是否应该能够接受损坏的参数,或者代码是否只是在出现问题时帮助调试。
关于C编程: how to avoid code duplication without losing clarity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19963395/
我使用 Clarity 数据网格,在某些情况下我需要禁用复选框选择。我找不到这样做的 API。请帮助和感谢。 最佳答案 Clarity 中还没有禁用数据网格特定行的选择,但有一个 Contributi
我正在尝试使用 Project Clarity 创建一个固定的导航栏 我在我的 Angular 项目中使用它,他们正在使用 FlexBox,我已经尝试放入 position: fixed 但它似乎不起
如何从 Clarity 录音中排除开发 session ?我在他们的设置中找不到任何选项。另外,是否可以将 session 录制限制在某些国家/地区? 最佳答案 最简单的方法是通过对当前主机名的简单检
当视口(viewport)尺寸较小时,表单字段会重叠。当空间不够时,有没有办法让表单字段捕捉到下一行? 代码片段:
我正在使用 .我想制作它的shape动态的。如果我指定 它抛出一个错误形状不是 clr-icon 的已知属性 最佳答案 这不是一个真正的清晰度函数,这是因为组件 clr-icon使用 shape H
示例 Field 1 label Field 2 label 上面是来自透明度表单的代码
我在将复选框列放入 VMware Clarity 数据网格时遇到问题,或者通常无法让多选行正常工作。 我可以让单选正常工作。 我在 VMware Clarity 文档中看到了示例: https://v
我的数据模型是一个包含多行的矩阵,其中一些行包含我想使用 Clarity Datagrid Expandable Rows 显示的详细信息。这是我正在尝试构建的简单版本: Artifact
我在将复选框列放入 VMware Clarity 数据网格时遇到问题,或者通常无法让多选行正常工作。 我可以让单选正常工作。 我在 VMware Clarity 文档中看到了示例: https://v
我的数据模型是一个包含多行的矩阵,其中一些行包含我想使用 Clarity Datagrid Expandable Rows 显示的详细信息。这是我正在尝试构建的简单版本: Artifact
在过去的几个月里,我读了一些关于并行编程的书,我决定通过学习 posix 线程来结束它。 我正在阅读“PThreads 编程 - 更好的多处理简明手册的 Posix 标准”。在第 5 章(Pthrea
当我在sidenav中创建vmware-clarity时,默认情况下会全部打开nav-links和nav-groups。 有没有办法让它们默认关闭? {{data.lab
我有一个使用 .Net 核心的 Angular 元素,我也在使用 Clarity,我想知道是否有办法改变 Clarity 拨动开关的颜色? 到目前为止,我尝试过的代码无法正常工作: 最佳答案
我想手动设置列(头部和主体)大小(宽度,高度)。我厌倦了设置样式但没有工作,并且找不到所有关于此的文档。 数据网格组件 DataGrid 设置宽度大小不起作用 最佳答案 设置列宽: my column
我已经开始使用 Clariy 开发 Angular 4 应用程序。我已经开始克隆 Clarity 种子项目,并以此为基础,开始构建我的组件。 如何将 Clarity 更新到最新版本?在开发产品时,我希
我正在 Java/Eclipse 中处理我的个人家谱,并且很高兴地遇到了关于图形表示的 prefuse。到目前为止,结果看起来对于我的数据库提要来说是足够的,但我仍然缺少使其更易于浏览的关键点。 第1
我正在尝试将 Accordion 组件添加到我的页面。但是 Accordion 组件的宽度太长了。事实上,如果我将它向右移动一点,我什至看不到右边框。 如何更改 Accordion 边框的宽度?我正在
有没有这样的方法来确定图像在被认为“失焦”之前可以放大多少? 一个实际例子(以及我要解决的问题): 我有一张保存为多种不同尺寸的图像,比如 500x500、250x250 和 120x120。我要服务
我正在使用 Clarity Signposts并需要它的状态(无论是打开还是关闭)。我正在使用 *clrIfOpen 结构指令并为其分配了 isOpen 变量。 isOpen 最初为 false,但在
数据网格中所有单元格的默认文本对齐方式都是左对齐的。我想将某些列更改为右对齐。我可以通过向 html 中的 clr-dg-cell 添加一个类“rj”,然后添加一个 css 样式来为网格主体中的单元格
我是一名优秀的程序员,十分优秀!