标题:VFP:多行注释的尴尬!
取消只看楼主
cssnet
Rank: 4
等 级:业余侠客
威 望:4
帖 子:317
专家分:203
注 册:2013-10-4
结帖率:100%
 问题点数: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: 4
等 级:业余侠客
威 望:4
帖 子:317
专家分:203
注 册:2013-10-4
得分:0 
以下是引用吹水佬在2022-4-26 20:42:47的发言:
if .f. 还是有效编译的代码
#if .f. 不会被编译的代码


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

确实不太习惯每一行都加注释符*!*
嗯……怎么说呢,多行注释后的代码,随时仍可能会编辑、随时恢复运行的,万一误碰到*!*,比如不小心将某一行首改成了*!,后果就难以预料啦。
2022-04-26 23:24
cssnet
Rank: 4
等 级:业余侠客
威 望:4
帖 子:317
专家分:203
注 册: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: 4
等 级:业余侠客
威 望:4
帖 子:317
专家分:203
注 册: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: 4
等 级:业余侠客
威 望:4
帖 子:317
专家分:203
注 册: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



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-508950-1-1.html




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

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