卓越的教练是如何训练高手的?周立功新浪博客
- 格式:pdf
- 大小:541.81 KB
- 文档页数:11
中国射击运动员的训练秘诀是什么《中国射击运动员的训练秘诀是什么》射击,一项需要高度专注、精准控制和稳定心态的运动。
中国射击运动员在国际赛场上屡获佳绩,他们的成功并非偶然,而是源于一系列科学、系统且严格的训练方法。
首先,基础体能训练是关键。
射击看起来是一项相对静态的运动,但实际上对运动员的身体素质有着很高的要求。
良好的体能可以保证运动员在长时间的比赛中保持专注和稳定。
他们会进行有氧和无氧的综合训练,如长跑、游泳等来提高心肺功能,增强耐力;同时也会通过力量训练,包括上肢、核心和下肢的力量练习,来提升身体的稳定性和控制力。
在技术训练方面,射击运动员需要对枪械的操作达到近乎本能的熟练程度。
从握枪的姿势、瞄准的方法到扣动扳机的力度和时机,每一个细节都至关重要。
教练会通过分解动作、反复练习和实时纠正,帮助运动员形成稳定而准确的射击动作。
同时,利用先进的模拟设备和训练系统,让运动员在各种虚拟场景和条件下进行射击训练,以提高他们应对不同情况的能力。
心理训练更是射击运动员训练中的重中之重。
在比赛中,面对巨大的压力和紧张的氛围,保持冷静和专注是取得好成绩的关键。
运动员们会接受专业的心理辅导,学习如何控制情绪、应对压力和克服紧张。
通过冥想、深呼吸等放松技巧,让自己在比赛前和比赛中保持平静的心态。
此外,还会进行抗压训练,模拟比赛中的各种突发情况和不利因素,培养运动员在困难条件下保持稳定发挥的能力。
日常的饮食和作息管理也不可忽视。
为了保证身体和大脑的最佳状态,运动员们的饮食需要严格控制,确保摄入均衡的营养,包括足够的蛋白质、碳水化合物和维生素等。
作息时间也有规律,保证充足的睡眠,让身体得到充分的休息和恢复。
射击运动员的训练并非一蹴而就,而是一个长期积累和不断改进的过程。
他们会定期参加比赛和考核,通过实战来检验训练成果,并根据比赛中的表现和数据反馈,及时调整训练计划和方法。
教练团队会对运动员的每一次射击进行详细的数据分析,从射击的精度、速度到运动员的心理状态等方面进行评估,找出问题并加以解决。
部队优秀四会教练员教案一、教案背景部队中的教练员是军事训练中非常重要的角色,他们通过教学和指导,培养和提升士兵们的战斗力和技能水平。
优秀的教练员具有专业知识和教学能力,并且能够灵活应对各种训练需求。
本文将介绍四位部队中的优秀教练员和他们的教案,展示他们在训练过程中的方法和经验。
二、教练员一:张教官教案内容:战术训练之小组协作教练员张教官在战术训练中注重培养士兵之间的团队合作能力。
他通过将士兵分为小组,并给予各小组一定的任务和目标,培养他们在一个紧密的团队中协作工作。
张教官注重士兵在训练中相互配合和沟通,提高团队的战斗力。
教学目标:•培养士兵之间的信任和合作意识。
•提高小组内部的沟通和协调能力。
•培养士兵在压力下能够迅速做出正确的决策。
教学步骤:1.将士兵分为小组,每个小组人数不超过5人。
2.给予每个小组一个战术任务,例如突破敌方防线、设立侦察网等。
3.设置一定的时间限制,要求小组完成任务。
4.在训练过程中,张教官会观察和评估小组的表现,并提供必要的指导和反馈。
5.训练结束后,组织小组成员之间的回顾和讨论,总结经验教训。
三、教练员二:王教官教案内容:武器使用训练教练员王教官在武器使用训练中注重培养士兵的精准射击和快速反应能力。
他通过模拟实战场景,训练士兵在极限情况下的武器操纵和应用能力,提高士兵在实际作战中的实际效果。
教学目标:•提高士兵的射击精准度和速度。
•培养士兵在极限情况下的冷静和快速反应能力。
•增强士兵对武器的了解和运用能力。
教学步骤:1.在训练场上设置不同的射击目标,包括静态和移动目标。
2.给予士兵适当的时间,在不同的位置进行射击训练。
3.强调射击的准确性和速度,鼓励士兵在有限的时间内完成任务。
4.在训练过程中,王教官会观察和评估士兵的射击情况,并进行必要的纠正和指导。
5.训练结束后,组织士兵之间的交流和讨论,总结经验教训。
四、教练员三:李教官教案内容:战术操练之迷雾战训练教练员李教官注重培养士兵在迷雾战中的决策能力和灵活应变能力。
C级教练员班提升队员一对一进攻突破能力1. 简介本文档旨在探讨提升篮球队员一对一进攻突破能力的方法与训练计划。
C级教练员班将在培养篮球队员综合技能的基础上,注重培养队员的个人突破能力,以便在比赛中更好地应对对手的防守。
2. 掌握基本技巧在提升队员一对一进攻突破能力之前,首先需要确保队员掌握以下基本技巧:- 控球技巧:队员需要能够稳定地控制球,并快速转移球的位置。
- 运球能力:队员需要掌握各种运球技巧,如腰部运球、变速变向运球等。
- 基本的变向突破技巧:队员需要能够利用变向动作突破过防守队员。
3. 训练计划3.1 第一阶段:基础技能训练在这一阶段,队员将着重练基础的控球技巧、运球能力和基本的变向突破技巧。
训练内容包括:- 控球训练:队员将进行各种控球训练,如推球、抛球、腿部控球等。
- 运球训练:队员将练不同的运球技巧,如过腿运球、跨步运球等。
- 变向突破训练:队员将研究和练不同的变向突破技巧,如胯部变向、抛投变向等。
3.2 第二阶段:对抗训练在基础技能训练之后,队员将进行与其他队员的对抗训练,以提高实战能力。
训练内容包括:- 一对一对抗:队员将进行一对一的对抗训练,通过与防守队员的对抗,提升突破效果。
- 二对二对抗:队员将组成二人小组进行对抗训练,以培养队员的配合与突破能力。
- 实战模拟:通过模拟实际比赛情景,让队员在对抗中应用他们所学的技巧。
3.3 第三阶段:个性化训练在基础技能和对抗训练的基础上,队员将进行个性化的训练,以提高其独特的突破能力。
训练内容包括:- 针对性训练:根据队员的个人特点和技术需求,进行个性化的突破训练。
- 视频分析:通过观看和分析比赛录像,帮助队员发现和改进个人突破技术。
- 进攻策略:训练队员在不同战术环境下的突破能力,以适应比赛需要。
4. 结论通过本文档的训练计划,C级教练员班能够提升篮球队员的一对一进攻突破能力。
从掌握基本技巧开始,到对抗训练和个性化训练,队员将得到全面的提升。
郭博门球技术教练示范1.引言1.1 概述概述部分的内容如下:郭博门是当今足坛最出色的门将之一,具备卓越的球技和出色的门将技术,因此备受球迷和专业人士的高度认可。
作为一名职业门将,郭博门在场上的表现总是惊人的,他稳定的发挥和冷静的判断力是他取得巨大成功的关键因素。
然而,门将技术的培养和训练并不是一件容易的事情,需要门将教练的指导和示范。
本文旨在通过介绍郭博门球技术教练示范的要点,帮助读者了解门将技术的要点和解决问题的方法。
首先,我们将从郭博门球技术教练示范的要点1开始。
随后,我们将进一步探讨郭博门示范的要点2,以便读者获得更全面的了解和学习。
通过本文的阅读,读者将了解到郭博门球技术教练示范的重要性和影响力。
同时,读者也会获得一些实用的技术和策略,以提升自己的门将技术水平。
最后,本文将对所述内容进行总结,并展望未来可能的发展方向。
无论您是一名足球爱好者、门将运动员还是教练员,相信本文都能为您提供有益的信息和知识。
让我们一起来学习郭博门球技术教练示范的要点,共同提升门将技术水平,为足球事业贡献自己的力量。
文章结构部分的内容可以写成如下形式:1.2 文章结构本文主要分为引言、正文和结论三个部分。
引言部分主要包括概述、文章结构和目的三个方面。
首先,对郭博门球技术教练示范进行一个简要概述,介绍郭博门作为球技术教练的背景和影响,并阐述其在门球技术教练上的重要性。
接着,明确文章结构,简要概括各个章节的内容。
最后,明确本文的目的,即通过分析郭博门球技术教练示范的要点,探讨其对于门球技术教练的启示和意义。
正文部分主要着重介绍郭博门球技术教练示范的要点。
其中,2.1节将详细解析郭博门球技术教练示范中的第一个要点,探讨其在提升门球技术水平上的重要性和实用性。
2.2节则将进一步介绍郭博门球技术教练示范的第二个要点,分析其对于门球运动员技术训练中的应用价值和意义。
结论部分将对全文进行总结,并展望进一步研究和应用的方向。
在总结中,将强调郭博门球技术教练示范的价值和意义,以及对于门球技术教练的启发和帮助。
真正的高手,都懂得掌握学习的逻辑"努力和收益不成正比"的困惑时常让我陷入思考。
多年来,通过阅读各类图书以及名人明星成功成长经历,我开始慢慢理解了这个困局的真正问题所在。
这个时代真正的高手,几乎都有一个特点——他们既懂得如何驱动自己持续努力和积累,也懂得借助社会和科技趋势放大自己努力的收益。
就和游泳一样,会游的人很省劲,不会游的人即使身体强健,也游得很累。
这就是对于水的理解不同,"水性"不同。
时代也是有水性的,有些人深刻理解时代的水性,能顺着大潮去很远的地方;有些人则不理解社会和时代的水性,搞不好还会淹死自己。
真正的高手,都懂得掌握学习的逻辑;你很努力却没什么成果,因为你缺的是学习的逻辑。
真正的高手,都懂得掌握学习的逻辑1.按照专家或老师的方法,针对性刻意练习。
相信你听说过"一万小时定义":想要成为一个高手,就练习一万小时!这个定义刺激着我们勤奋。
没错,勤奋是成为高手的必要条件,可是并不是勤奋,就代表着会成为高手。
这个定义最大的负面价值就是:我们认为勤奋是必然成功的,没有成功就会找其他借口。
就像国足,他们很努力,可是没有成功,所以不是他们的问题,而将其归结到其他的外部原因。
实际上这种勤奋只能称为"傻用功"。
一万小时定义隐藏了巨大的、方向性的前提:我们需要学习老员工成功的方法,然后根据"套路"有针对性地重复练习,把大的知识体系拆碎,成为一个一个小模块,成为一个一个小的知识罐头,然后分头去练这叫练习。
总结成一句话就是:就是学别人成型的套路,把整座大厦拆成一个一个的砖头去训练,这样精度更高。
光有套路也不行,还需要重复,不断地重复。
应注意,想要成为某一领域的高手,就需要坚持长期的"刻意练习",刻意练习需要具备4个基本的特征:有明确定义的目标、保持专注、即时反馈和走出舒适区。
最后,"1万小时理论"的流行,不可避免地引来了一些反对者,认为其就是美颜相机拍过的成功学,本质还是一碗成功学鸡汤。
做No.1的教练团队管理与领导艺术引言在现今竞争激烈的市场中,成为No.1的教练团队需要一个高效的管理与领导艺术。
本文将介绍如何通过有效的团队管理和领导技巧,构建一个卓越的No.1教练团队。
1. 共同的愿景与目标一个成功的教练团队需要有共同的愿景和目标。
首先,领导者应该明确传达团队的愿景和目标,让每个成员都能理解并且认同。
然后,领导者需要激发团队成员的激情和动力,为实现这一共同目标而努力。
2. 清晰的角色和职责分工成功的团队需要明确的角色和职责分工。
领导者应该在团队中明确每个成员的职责,并确保每个人都清楚自己的工作范围和责任。
这样可以减少冲突和混乱,并最大限度地提高团队的效率和协作。
3. 建立强大的沟通渠道良好的沟通是成功团队的关键。
领导者应该建立起一个开放和透明的沟通渠道,让团队成员可以随时交流和分享信息。
同时,领导者应该倾听团队成员的反馈和建议,并及时对问题做出回应。
通过有效的沟通,团队成员可以更好地理解彼此,并共同解决问题。
4. 激励和奖励激励和奖励是激发团队成员动力和激情的重要手段。
领导者应该发现并强调团队成员的优点和成绩,并根据他们的贡献给予适当的奖励和认可。
这将激发团队成员更加努力地工作,并提高整个团队的业绩。
5. 培养领导潜力作为团队领导者,不仅要管理团队,还应培养团队成员的领导潜力。
领导者应该提供相关的培训和发展机会,帮助团队成员发展他们的领导技能和能力。
通过培养团队成员的领导潜力,可以确保团队的可持续发展和增长。
6. 灵活的适应成功的团队需要具备适应变化的能力。
领导者应该能够及时调整和适应外部环境的变化,并引导团队成员一起应对挑战和解决问题。
灵活的适应能力将使团队能够在不断变化的市场中保持竞争力和优势。
7. 提供持续的学习和发展机会一个优秀的教练团队需要不断学习和发展。
领导者应该提供持续的学习机会,帮助团队成员不断提升自己的技能和知识。
同时,领导者也应该鼓励团队成员积极参与行业研讨会、培训课程等活动,以拓宽他们的视野和修养。
部队教练员集训总结2023年5月4日5月10日,我有幸参与了“学转英超”在大连的足球教练员培训活动,在这次培训中,我有幸接触到来自英超的四位足球教练员:罗比厄尔,杰夫努南,安迪福斯特,李洛克雷。
他们幽默、幽默的教学形式,让我感受到英超教练们独特的教学风格。
这六天的培训,让我收获许多。
在这六天里,前三天我们进展的是技术技能学习,第四天和第五天是我们运用英超的教学理念备课,并给自己的学员上课,每人30分钟时间,第六天是检验我们的学习成果,给大连市市内四个区的足球学校的小学生上一节“全英超式”的展现课。
一、不同的教学理念营造不同的教学风格。
在这次培训中,英超教练独特的教学风格,让我耳目一新。
在教学中,英超教练从来不先讲动作要领,而是让学员们做各种练习,在练习中,学员会通过亲身体验提出各种各样的问题,教练员则在回答下列问题中,告知你他为什么要这样做和这样做的教学效果。
杰夫是我们组的教练,他特殊强调,不要可怕你的学生犯错误,他们犯的错误越多,你的教学效果越好。
他们的这种教学模式很像我们学校的“先试后导,先练后讲”的教学策略。
教学中,外教们特殊强调嬉戏的运用,在前三天的技术教学中,他们在一上午四个小时的训练中,几乎都是让我们在嬉戏中度过的,大家玩的既快乐又学到许多的技术。
吉夫教练告知我们,肯定要“爱护”好孩子们的学习兴趣,让他们对我们每次课的学习都布满想象和期盼。
不要让孩子做过多的机械式的练习,那样会影响他们学习的积极性和制造性的。
在嬉戏教学中,外教们特殊强调对身体的利用,他们说,假如一名队员在竞赛中不会利用自己的身体,那么他将永久不会成为一名优秀的足球运发动的。
在这里,罗比讲了梅西的例子,梅西是阿根廷的国脚和西班牙巴塞罗那的进攻核心,他脚感很好,技术出众,速度奇快,视野宽广,而他的身高只有1。
68米,体重较校但是这么小的身高却能在欧洲高水平的联赛中成为球队的核心,关键在于他对身体的利用。
梅西在竞赛中,除了身体护球做的很好之外,他还会利用对方的身体,当他和比他强壮的队员对抗时,他会用身体去挤靠对方,当对方用力反抗时,他就会借助对方的力气,将自己弹出去,进而摆脱对方的防守。
庵罗卫园庵罗卫园今天2023年,“一万小时天才定律”被马尔科姆·格拉德威尔(Malcolm Gladwell)在《异类》中提出后,一度风行全球。
2023年,心理学家安德斯·艾利克森(Anders Ericsson)与罗伯特·普尔(Robert Pool)出版《刻意练习:如何从新手到大师》,对“一万小时天才定律”进行了修正和颠覆,并提出“刻意练习(Deliberate Practice)”概念。
刻意练习是艾利克森在长期研究的结果,他在“专业特长科学”领域潜心几十年,研究了一系列行业或领域中的专家级人物:国际象棋大师、顶尖小提琴家、运动明星、记忆高手、拼字冠军、杰出医生等。
他发现,不论在什么行业或领域,提高技能与能力的最有效方法全都遵循一系列普遍原则,他将这种通用方法命名为“刻意练习”。
郭兴福教学法的特点是:郭兴福在教学中很注意抓思想,充分调动战士练兵的积极性。
一个战士摆在他面前,他能够做很多文章。
不管新战士老战士,到了训练场都能够自自然然地把积极性提起来。
练兵场上气候怎么样,场地有什么特点,战士情绪有什么变化,每个动作的练习可能有些什么困难,他看得清楚,想得周到,适时进行简短有力的思想动员,抓住现实材料,进行现实教育。
战士做动作,有好的就表扬,以表扬为主。
动作全部做对、做好的,他表扬;就是在几个动作中只有一个动作做得好的,他也是先表扬战士这一个优点,再指出缺点,实事求是。
练习每个动作,他都要大家说说谁做得好,哪一点做得好,进行群众性的表扬,并且及时树立标兵,造成练兵场上你追我赶的热烈情绪,使大家越学越有兴趣,越练越有劲头。
郭兴福教学方法是采用由简到繁,循序渐进,情况诱导,正误对比等办法,使战士逐步加深认识,掌握要领,一步一步提高。
组织很周密,教得很灵活。
例如投手榴弹,他把每个动作分解成若干细节:手榴弹怎么抓法,抓紧一点,还是抓松一点;什么时候抓紧,什么时候抓松;甩的时候,前脚怎么样,后脚怎么样,腰杆怎么样,等等,都讲得很清楚,使战士在学甩手榴弹的时候不但知其然,而且知其所以然。
迄今为止最强大的学习方法:刻意练习,成为高手的秘籍不知道你有没有这样的想法:如果有个人某件事做的特别好,我就觉得他在这件事上有天赋。
比如,我小时候打乒乓球,总也打不过我的一个同学。
我就认为在打乒乓球上,他比我有天赋。
于是,我遇到画画好的人,他有画画的天赋。
遇到跳舞跳的好的人,他有跳舞的天赋。
看直播一哥李佳琦,他有直播的天赋。
对啊,我某件事做的不好,是因为我没有天赋嘛。
你是不是也这么想过?前几天还有人问我:哎,得俊,我感觉你文章写的还行,是不是因为你有写作的天赋。
我仔细地想了一下,还真不是。
我以前写的很烂,我现在之所以写的还凑合,是因为我看了《刻意练习》这本书,我照着书中的方法练的。
《刻意练习》的作者,心理学家艾里克森,调查了各个领域的高手,得出了一个惊人的结论:天赋没有你想象的那么重要,高手之所以是高手,是因为他们有一套不为人知的练习方法。
刻意练习在讲练习的方法之前,我们先从小提琴天才,帕格尼尼的故事讲起。
帕格尼尼有一次演出,演着演着,啪,琴弦崩了一根,从四根成了三根。
这是演出事故啊,这演不了了吧,观众们心想。
但帕格尼尼没被干扰,接着用三根拉,还是一样好听。
拉了一会儿,啪,又断了,剩两根了,没法演了吧。
帕格尼尼还是接着拉,拉的还是好听。
观众们惊呆了,这特么也行。
最后,又崩了一根,帕格尼尼还是没停,用一根拉的照样好听。
拉到最后,帕格尼尼的手血肉模糊,观众们响起了雷鸣般的掌声。
哇,你说这不就是天才吗?但经过调查,还真不是。
帕格尼尼以前搞对象的时候,为了讨女孩欢心,把琴弦中间的两根去掉了,还剩两根。
一根代表男的,一根代表女的。
挺浪漫吧,他就练习用两根琴弦拉,拉的也挺好听。
后来,有个公主说。
哎,你能不能用一根弦拉啊。
他就开始练一根弦,一根弦也能拉的好听。
也就是说,他上台演这个时,琴弦断不是意外情况,是他故意用力崩断的的,在这之前他经过了大量练习。
再举个例子,音乐神童莫扎特,9岁就能作曲。
莫扎特有一项神乎其神的技能,叫完美音高。
卓越的教练是如何训练高手的?_周立功_新浪博客http://blog.sina.com.cn/s/blog_5e8facd20100eorv.html[2009-12-28 19:34:42]节目预告当年明月小学班长,请进。推敲你的例题百年一人美国人眼中最不道德的事儿是啥乔磊解释“中国”之难但斌大学生创业:爱心比资金更重要快活林《告诉孩子怎样爱》:让他们不林艺20091226唐师曾:北大校长 周其peaceduck唐老鸭日本人的沉默螺旋毛丹青夫妻之间的生活趣事大曝光龙谈[组图]最新让人暴汗的囧人囧图娄行健卓越的教练是如何训练高手的?_周立功_新浪博客
http://blog.sina.com.cn/s/blog_5e8facd20100eorv.html[2009-12-28 19:34:42] 也就是说我们需要将结构体指针强制转换成char * 才能够正常工作,这样除了字符串以外其它的类型都不可避免地要进行指针强制转换,否则编译器就会呱呱叫,比如在VC++2008下就会出现这样的错误:
error C2664: 'MyMemMove' : cannot convert parameter 1 from 'TheStruct *' to 'char *' 那么如何解决这个问题呢?其实很简单,我们知道有一种特别的指针,任何类型的指针都可以对它赋值,那就是void *,所以应该将源地址和目的地址都用void*来表示。当然函数体的内容也要作相应的改变,这样我们就得到了V0.2版的程序。
程序清单 3 V0.2版程序void MyMemMove(void *dst,void *src,int count){ while (count--) { *(char *)dst = *(char *)src; dst = (char *)dst + 1; src = (char *)src + 1; }} 有的同学可能会问,这里面不是还有指针强制转换吗?只不过是换了地方。没错,强制指针转换确实是从使用者的代码转移到了库的代码里,但我们可以将MyMemMove理解为库,而将Test理解为使用者,事实上通过调整之后的效果却有天壤之别,V0.1是一逸永劳,而V0.2是一劳永逸!
还有几个细节需要注意,为了实现链式表达式,我们应该将返回值也改为void *。此外,如果我们不小心将“*(char *)dst = *(char *)src;”写反了,写成“*(char *)src = *(char *)dst;”编译照样通过,而为了找出这个错误又得花费不少时间。注意到src所指向的内容在这个函数内不应该被改变,所有对src所指的内容赋值都应该被禁止,所以这个参数应该用const修饰,如果有类似的错误在编译时就能够被发现:
error C3892: 'src' : you cannot assign to a variable that is const 作为程序员犯错误在所难免,但是我们可以利用相对难犯错误的机器,也就是编译器来降低犯错误的概率,这样我们就得到了V0.3版的程序。
程序清单 4 V0.3版程序void * MyMemMove(void *dst,const void *src,int count){ void *ret=dst; while (count--) { *(char *)dst = *(char *)src; dst = (char *)dst + 1; src = (char *)src + 1; } return ret;} 现在再来考虑这样一种情况,有使用者这样调用库:MyMemMove(NULL,src, count),这是完全可能的,因为一般来说这些地址都是程序计算出来的,那就难免会算错,出现零地址或者其它的非法地址也不足为奇。可以预料的是,如果出现这种情况的话,则程序马上就会down掉,更糟糕的是你不知道错误出在哪里,于是不得不投入大量的精力在浩瀚的代码中寻找bug。解决这类问题的通用办法是对输入参数作合法性检查,也就是V0.4版程序。 卓越的教练是如何训练高手的?_周立功_新浪博客http://blog.sina.com.cn/s/blog_5e8facd20100eorv.html[2009-12-28 19:34:42] 5 V0.4版程序void * MyMemMove(void *dst,const void *src,int count){ void *ret=dst; if (NULL==dst||NULL ==src) { return dst; } while (count--) { *(char *)dst = *(char *)src; dst = (char *)dst + 1; src = (char *)src + 1; } return ret;} 上面之所以写成“if (NULL==dst||NULL ==src)”而不是写成“if (dst == NULL || src == NULL)”,也是为了降低犯错误的概率。我们知道,在C语言里面“==”和“=”都是合法的运算符,如果我们不小心写成了“if (dst = NULL || src= NULL)”还是可以编译通过,而意思却完全不一样了,但是如果写成“if (NULL=dst||NULL =src)”,则编译的时候就通不过了,所以我们要养成良好的程序设计习惯:常量与变量作条件判断时应该把常量写在前面。
V0.4版的代码首先对参数进行合法性检查,如果不合法就直接返回,这样虽然程序dwon掉的可能性降低了,但是性能却大打折扣了,因为每次调用都会进行一次判断,特别是频繁的调用和性能要求比较高的场合,它在性能上的损失就不可小觑。
如果通过长期的严格测试,能够保证使用者不会使用零地址作为参数调用MyMemMove函数,则希望有简单的方法关掉参数合法性检查。我们知道宏就有这种开关的作用,所以V0.5版程序也就出来了。
程序清单 6 V0.5版程序void * MyMemMove(void *dst,const void *src,int count){ void *ret=dst;#ifdef DEBUG if (NULL==dst||NULL ==src) { return dst; }#endif while (count--) { *(char *)dst = *(char *)src; dst = (char *)dst + 1; src = (char *)src + 1; } return ret;} 如果在调试时我们加入“#define DEBUG”语句,增强程序的健壮性,那么在调试通过后我们再改为“#undefDEBUG”语句,提高程序的性能。事实上在标准库里已经存在类似功能的宏:assert,而且更加好用,它还可以卓越的教练是如何训练高手的?_周立功_新浪博客http://blog.sina.com.cn/s/blog_5e8facd20100eorv.html[2009-12-28 19:34:42]DEBUG时指出代码在那一行检查失败,而在没有定义DEBUG时完全可以把它当作不存在。assert(_expression_r_r_r)的使用非常简单,当_expression_r_r_r为0时,调试器就可以出现一个调试错误,有了这个好东西代码就容易多了。
程序清单 7 V0.6版程序void * MyMemMove(void *dst,const void *src,int count){ assert(dst); assert(src); void *ret=dst; while (count--) { *(char *)dst = *(char *)src; dst = (char *)dst + 1; src = (char *)src + 1; } return ret;} 一旦调用者的两个指针参数其中一个为零,就会出现如图1所示的错误,而且指示了哪一行非常容易查错。
图 1 assert(NULL)时,显示错误 到目前为止,在语言层面上,我们的程序基本上没有什么问题了,那么是否真的就没有问题了呢?这就要求程序员从逻辑上考虑了,这也是优秀程序员必须具备的素质,那就是思维的严谨性,否则程序就会有非常隐藏的bug,就这个例子来说,如果用户用下面的代码来调用你的程序。
程序清单 8 重叠的内存测试void Test(){ char p [256]= "hello,world!"; MyMemMove(p+1,p,strlen(p)+1); printf("%s\n",p);} 如果你身边有电脑,你可以试一下,你会发现输出并不是我们期待的“hhello,world!”(在“hello world!”前加卓越的教练是如何训练高手的?_周立功_新浪博客http://blog.sina.com.cn/s/blog_5e8facd20100eorv.html[2009-12-28 19:34:42]