如何测试单个 C 文件里的代码? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
wenLiangcan
V2EX    问与答

如何测试单个 C 文件里的代码?

  •  
  •   wenLiangcan 2014-10-12 22:29:38 +08:00 3389 次点击
    这是一个创建于 4015 天前的主题,其中的信息可能已经有所发展或是发生改变。
    因为 OJ 一般不能上传多个文件,所以不想建一个 header 文件,可是这时想在一个独立的文件里写测试代码要怎么才能调用到被测试文件里的函数呢?
    15 条回复    2014-10-12 23:52:14 +08:00
    wisatbff
        1
    wisatbff  
       2014-10-12 22:31:27 +08:00
    没看懂你要做什么
    wenLiangcan
        2
    wenLiangcan  
    OP
       2014-10-12 22:36:02 +08:00
    @wisatbff 额,比如我在 a.c 里有个函数 func,可是 func 是直接声明在 a.c 里面的(就是没有建 header),我要怎么在另一个文件 b.c 里调用到 func 呢?
    ChanneW
        3
    ChanneW  
       2014-10-12 22:41:57 +08:00   1
    extern
    ChanneW
        4
    ChanneW  
       2014-10-12 22:49:43 +08:00
    声明总归都要写一遍的, 不放到头文件里, 你就要放到 b.c 里. 还得加 extern . 所以还是老老实实写 .h 吧.
    而且 C 编程习惯把详细的函数注释写在 .h 里, 这样方便别人看(用的人不关系怎么实现的,只看怎么调),做成lib 也容易. .h 本身就是最好的文档.
    wenLiangcan
        5
    wenLiangcan  
    OP
       2014-10-12 22:56:47 +08:00
    @ChanneW 我并不排斥写头文件,只是做 OJ 的情况,要打开复制粘贴两个文件觉得好麻烦。。。。
    msg7086
        6
    msg7086  
       2014-10-12 23:08:43 +08:00 via iPhone
    头文件不用交吧,你只是把函数导出给测试程序而已啊
    wisatbff
        7
    wisatbff  
       2014-10-12 23:10:25 +08:00
    @wenLiangcan 写个脚本,一劳永逸
    ChanneW
        8
    ChanneW  
       2014-10-12 23:17:46 +08:00
    没做过 C 的 oj
    我以为 OJ 提交的文档一般是完整的文档,包含main 的,通过标准标准输出,控制和检测正确性.
    难道是直接提交单个函数? 那得要规定好用户提交的函数名字和参数喽~
    wenLiangcan
        9
    wenLiangcan  
    OP
       2014-10-12 23:20:25 +08:00
    @msg7086 可是总得写声明吧?不就得把头文件里的声明跟代码一起交上去么?还有可能我们学校的系统比较烂吧,需要自己写 main 函数。
    wenLiangcan
        10
    wenLiangcan  
    OP
       2014-10-12 23:21:57 +08:00
    @ChanneW 是交完整的文档,可是只是一个文档。。。。
    wenLiangcan
        11
    wenLiangcan  
    OP
       2014-10-12 23:23:03 +08:00
    @wisatbff 你是指合并 source 跟 header 的脚本?是有这个想法。
    ChanneW
        12
    ChanneW  
       2014-10-12 23:27:55 +08:00
    干嘛要掉里面的函数呢? 直接开个子进程,把提交的文档编译执行不就好了?
    wenLiangcan
        13
    wenLiangcan  
    OP
       2014-10-12 23:37:26 +08:00
    @ChanneW 我的意思是,我们学校的 OJ 系统,在提交代码时只有一个文本框,如果我建立头文件的话,就得从头文件和源文件里 一共 复制粘贴两次到那个文本框里,我觉得这样有点麻烦,所以开了这个贴。(其实我不太确定你最近这条回复的意思。。。)
    bcxx
        14
    bcxx  
       2014-10-12 23:48:30 +08:00   1
    你要测试的话可以直接 #ifdef debug ,然后包你的测试函数在里面。提交的时候再把最开的 #define debug 1 改成 #define debug 0 就可以了。
    ChanneW
        15
    ChanneW  
       2014-10-12 23:52:14 +08:00
    我以为你是在做OJ系统,原来你是想测自己的代码.明白了.
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3374 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 04:31 PVG 12:31 LAX 21:31 JFK 00:31
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86