| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2652 人关注过本帖, 1 人收藏
标题:VFP:多行注释的尴尬!
取消只看楼主 加入收藏
cssnet
Rank: 5Rank: 5
等 级:职业侠客
威 望:5
帖 子:351
专家分:335
注 册:2013-10-4
结帖率:100%
收藏(1)
 问题点数:0 回复次数:5 
VFP:多行注释的尴尬!
VFP没有多行注释符:

/*
------------
1行注释
2行注释
3行注释
------------
*/

感觉挺别扭的。
事关,习惯分段式调试:一段代码搞掂了,就注释掉,接着集中去搞另一段。
而VFP中只能这样子多行注释:

if .f.
*------------
1行注释
2行注释
3行注释
*------------
endif .f.

这倒不是问题,勉强也能接受;可问题是,这样子注释掉多行代码,却仍必须保证if .f. ~ endif .f.之间的代码没有语法错误,因VFP仍是会编译这一段代码的。
注释仍要讲究语法正确,这也太太太太强人所难了吧?
呵呵。


[此贴子已经被作者于2022-4-26 17:03编辑过]

搜索更多相关主题的帖子: VFP 注释 if 代码 多行 
2022-04-26 17:01
cssnet
Rank: 5Rank: 5
等 级:职业侠客
威 望:5
帖 子:351
专家分:335
注 册:2013-10-4
收藏
得分:0 
以下是引用吹水佬在2022-4-26 20:42:47的发言:
if .f. 还是有效编译的代码
#if .f. 不会被编译的代码


哈哈!感谢吹版!又学到一招!
其他多行注释的方式都没这个方便,主要原因是:
多行注释必须能够保证:在任何时候,只要有需要,“一键”就能迅速将临时注释掉的多行代码还原回去。比方说,在每一行首加*,或每一行尾加;之类,那都是没法还原的。那不成,自己给自己下套,一不小心就会埋雷,且以后很难发现了!
2022-04-26 21:42
cssnet
Rank: 5Rank: 5
等 级:职业侠客
威 望:5
帖 子:351
专家分:335
注 册:2013-10-4
收藏
得分:0 
以下是引用my2318在2022-4-26 22:20:43的发言:
选中要注释的内容,用菜单里的注释命令加注释符号,选中注释用菜单的反注释解除注释不好吗?

确实不太习惯每一行都加注释符*!*
嗯……怎么说呢,多行注释后的代码,随时仍可能会编辑、随时恢复运行的,万一误碰到*!*,比如不小心将某一行首改成了*!,后果就难以预料啦。
2022-04-26 23:24
cssnet
Rank: 5Rank: 5
等 级:职业侠客
威 望:5
帖 子:351
专家分:335
注 册:2013-10-4
收藏
得分:0 
确实只是一个习惯问题,呵呵,习惯就好!

随便拿一段吹版的代码做例子:

* ----------源程序--------------
FUNCTION load_data(filename)
    IF !FILE(filename)
        RETURN 0
    ENDIF
    LOCAL fp, ptr
    fp = myFOpen(filename, "rb")
    IF  fp == 0
        RETURN 0
    ENDIF
    head = 0
    last = 0
    IF apiFRead(pBuffer,bufSize,1,fp) == 1
        head = dt.create()
        apiMemcpy_s(head, bufSize, pBuffer, bufSize)
        dt.setValue("next", 0, head)
        last = head
    ENDIF
    DO WHILE apiFRead(pBuffer,bufSize,1,fp) == 1
        ptr = dt.create()
        apiMemcpy_s(ptr, bufSize, pBuffer, bufSize)
        dt.setValue("next", 0, ptr)
        dt.setValue("next", ptr, last)
        last = ptr
    ENDDO
    apiFClose(fp)
    RETURN head
ENDFUNC

* ----------临时注释掉一段程序--------------
FUNCTION load_data(filename)
    IF !FILE(filename)
        RETURN 0
    ENDIF
    LOCAL fp, ptr
    fp = myFOpen(filename, "rb")
    IF  fp == 0
        RETURN 0
    ENDIF
    head = 0
    last = 0
    IF apiFRead(pBuffer,bufSize,1,fp) == 1
        head = dt.create()
        apiMemcpy_s(head, bufSize, pBuffer, bufSize)
        dt.setValue("next", 0, head)
        last = head
    ENDIF
#if .f. &&-------------暂时跳过以下循环-------------
    DO WHILE apiFRead(pBuffer,bufSize,1,fp) == 1
        ptr = dt.create()
        apiMemcpy_s(ptr, bufSize, pBuffer, bufSize)
        dt.setValue("next", 0, ptr)
        dt.setValue("next", ptr, last)
        last = ptr
    ENDDO
#endif .f. &&-------------暂时跳过以上循环-------------
    apiFClose(fp)
    RETURN head
ENDFUNC

* ------------------------------------------------
* 若随时想要取消注释,只需将#if .f. 和#endif .f.这两行的行首#换成*即可
* 亲,不香吗?
* ------------------------------------------------
2022-04-27 16:15
cssnet
Rank: 5Rank: 5
等 级:职业侠客
威 望:5
帖 子:351
专家分:335
注 册:2013-10-4
收藏
得分:0 
其实还有最尴尬的一点:

VFP的代码编辑器已是十几年前的了,并不好用,甚至可以说很不友好,除了一些表单与可视化类库,我极少在IDE中写代码,一般会用Editplus、EmEditor、UltraEdit之类写prg,甚至表单和类库都在EP、EM、UE中写局部代码——因VFP没法进行版本跟踪比较,想汇总比较一下Ver 2.03与Ver 2.02的代码差异,还得统统转化为纯文本文件,用最原始的文本比较工具,如UltraCompare之类来作对比,作统计。

你让我在Editplus中,怎么方便地添加多行注释?——那肯定是类C风格的多行注释最方便啦!亲。
2022-05-01 07:51
cssnet
Rank: 5Rank: 5
等 级:职业侠客
威 望:5
帖 子:351
专家分:335
注 册:2013-10-4
收藏
得分:0 
以下是引用foxfans在2022-5-15 14:22:22的发言:
方法多种多样,符合规则即可,以下代码会影响运行效率。
#DEFINE _s text to _nop noshow
#DEFINE _o endtext

_s
 sss
 ssdfds
 dsfs
_o
...


还挺有趣的!
不过有些尴尬的是:
1、自定义的“_s / _o”,别人一眼看不懂;
2、有没考虑过,若真这么干的话,就必须在每一个文件头都得添加#DEFINE或#INCLUDE,难道,你不嫌麻烦么?
呵呵。

单就代码简洁优雅方面考量,个人感觉,吹版的建议最佳!

#if .f.
   *--------------
   巴拉巴拉
   叽哩呱啦
   阿吱阿咗
   九唔搭八
   ……
   *--------------
#endif .f.
2022-05-15 17:29
快速回复:VFP:多行注释的尴尬!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018414 second(s), 11 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved