泊松表面重建源码分析

在泊松表面重建的源码中有如下一段代码:

 1 #include <stdio.h>
 2 #include <stdarg.h>
 3 #include <string.h>
 4
 5 //将结果写入的目标文件
 6 char* outputFile = "DumpOutPutTest.txt";
 7 //echoStdout控制是否通过控制台显示出来
 8 int echoStdout = 1;
 9
10 void DumpOutput(const char* format, ...)
11 {
12     if (outputFile)
13     {
14         FILE* fp = fopen(outputFile, "a");
15         va_list args;
16         va_start(args, format);
17         vfprintf(fp, format, args);
18         fclose(fp);
19         va_end(args);
20     }
21     if (echoStdout)
22     {
23         va_list args;
24         va_start(args, format);
25         vprintf(format, args);
26         va_end(args);
27     }
28 }
29 void DumpOutput2(char* str, const char* format, ...)
30 {
31     if (outputFile)
32     {
33         FILE* fp = fopen(outputFile, "a");
34         va_list args;
35         va_start(args, format);
36         vfprintf(fp, format, args);
37         fclose(fp);
38         va_end(args);
39     }
40     if (echoStdout)
41     {
42         va_list args;
43         va_start(args, format);
44         vprintf(format, args);
45         va_end(args);
46     }
47     va_list args;
48     va_start(args, format);
49     vsprintf(str, format, args);
50     va_end(args);
51     if (str[strlen(str) - 1] == ‘\n‘) str[strlen(str) - 1] = 0;
52 }
53 int main()
54 {
55     int i;
56     char **comments;
57     int commentNum = 0;
58
59     comments = new char*[10];
60
61     for (i = 0; i< 5; i++) comments[i] = new char[1024];
62
63     DumpOutput("DumpOutput: %9.1f\n", 12.345);
64     DumpOutput2(comments[commentNum++], "#DumpOutput2: %6.1f (s), %5.1f (MB)\n", 2.344, 3.454);
65     DumpOutput2(comments[commentNum++], "#DumpOutput2: %6.1f (s), %5.1f (MB)\n", 3.344, 4.454);
66     DumpOutput2(comments[commentNum++], "#DumpOutput2: %6.1f (s), %5.1f (MB)\n", 4.344, 5.454);
67     DumpOutput("DumpOutput: %9.1f\n", 23.565);
68
69 }

其实通过这里我们就可以知道

char* outputFile = "DumpOutPutTest.txt";

是控制结果输出文件的。生成的文件和源码文件在同一路径下。如下图所示:


int echoStdout = 1;

是控制是否将结果输出到控制台。


if (str[strlen(str) - 1] == ‘\n‘) str[strlen(str) - 1] = 0;

这一句也很明显,只在DumpOutput2中出现了,根据意思就是判断最后一字符是否为换行如果是就用0来代替。但是在此之前已经将结果输入到文件并打印到屏幕了。到底为什么这个么写,再议?!

其实有人想知道代码中具体语句的含义,比如:

va_list args;
va_start(args, format);
vprintf(format, args);
va_end(args);

其实我也看过,不过我现在觉得对于如此庞大的程序来说知道这部分的含义就可以了,具体什么意思,有兴趣的也可以进一步问问Google大神。

时间: 2024-10-12 04:22:09

泊松表面重建源码分析的相关文章

泊松表面重建中PoissonRecon.cpp源码分析

独学而无友,则孤陋而寡闻.深知独学的无奈,深知无友的感慨,所以个人将学习研究过程当中遇到的.学习到的东西分享出来,只为有志同道合的朋友互相交流,共同进步. 有一QQ群:285214996,希望汇聚所有这个领域的朋友,我们一起分享学习的快乐. 泊松表面重建中会PoissonRecon.cpp文件,下面是我个人在研究过程当中的分析过程,定有不当之处,还请指出. 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <math.

[Java] HashMap源码分析

1.概述 Hashmap继承于AbstractMap,实现了Map.Cloneable.java.io.Serializable接口.它的key.value都可以为null,映射不是有序的. Hashmap不是同步的,如果想要线程安全的HashMap,可以通过Collections类的静态方法synchronizedMap获得线程安全的HashMap. Map map = Collections.synchronizedMap(new HashMap()); (除了不同步和允许使用 null 之

solr源码分析之solrclound

一.简介 SolrCloud是Solr4.0版本以后基于Solr和Zookeeper的分布式搜索方案.SolrCloud是Solr的基于Zookeeper一种部署方式.Solr可以以多种方式部署,例如单机方式,多机Master-Slaver方式. 二.特色功能 SolrCloud有几个特色功能: 集中式的配置信息使用ZK进行集中配置.启动时可以指定把Solr的相关配置文件上传Zookeeper,多机器共用.这些ZK中的配置不会再拿到本地缓存,Solr直接读取ZK中的配置信息.配置文件的变动,所有

Handler机制.源码分析

Handler机制的原理 : Android提供了handler 和 looper 来满足线程之间的通信 Handler是先进先出的原则 一个线程可以产生一个looper对象,由它去管理线程里面消息队列 MessageQueue Handler 你可以构造handler对象来与looper沟通.可以发送消息 和处理消息 MessageQueue 用来存放线程放入的消息 线程 一般值的是主线程 UIthread Android启动程序的时候会替他建立一个MessageQueue   .Handle

Java-HashMap源码分析及示例

纸上得来终觉浅,绝知此事要躬行  --陆游    问渠那得清如许,为有源头活水来  --朱熹 HashMap是一个散列表,存储的内容是键值对(key-value)映射.HashMap继承于AbstractMap并实现了Map.Cloneable.Serializable接口. (1)HashMap不是线程安全的,同时key-value都可以为null,并且是无序的. (2)HashMap的初始大小为16,最大大小为2的30次方,默认的加载因子是0.75. (3)初始容量只是哈希表在创建时的容量,

.net源码分析 – Dictionary&lt;TKey, TValue&gt;

接上篇:.net源码分析 – List<T> Dictionary<TKey, TValue>源码地址:https://github.com/dotnet/corefx/blob/master/src/System.Collections/src/System/Collections/Generic/Dictionary.cs 接口 Dictionary<TKey, TValue>和List<T>的接口形式差不多,不重复说了,可以参考List<T>

Android应用Activity、Dialog、PopWindow窗口显示机制及源码分析

[工匠若水 http://blog.csdn.net/yanbober 转载烦请注明出处,尊重劳动成果] 1 背景 之所以写这一篇博客的原因是因为之前有写过一篇<Android应用setContentView与LayoutInflater加载解析机制源码分析>,然后有人在文章下面评论和微博私信中问我关于Android应用Dialog.PopWindow.Toast加载显示机制是咋回事,所以我就写一篇文章来分析分析吧(本文以Android5.1.1 (API 22)源码为基础分析),以便大家在应

协议的注册与维护——ndpi源码分析

在前面的文章中,我们对ndpi中的example做了源码分析.这一次我们将尽可能深入的了解ndpi内部的结构和运作.我们将带着下面三个目的(问题)去阅读ndpi的源代码. 1.ndpi内部是怎么样注册和维护需要检测的协议呢? 2.ndpi在初始化的过程中,做了怎么样的工作? 3.ndpi在底层的实现中具体又是使用怎样的数据结构? 注:这里限于篇幅,本文章指针对使用中的初始化部分进行源码分析.主体的分析函数和具体的各个协议将在后面的文中陆续介绍.如果有不正确或者理解不到位的地方,欢迎大家一起讨论.

Java集合源码分析(二)ArrayList

ArrayList简介 ArrayList是基于数组实现的,是一个动态数组,其容量能自动增长,类似于C语言中的动态申请内存,动态增长内存. ArrayList不是线程安全的,只能用在单线程环境下,多线程环境下可以考虑用Collections.synchronizedList(List l)函数返回一个线程安全的ArrayList类,也可以使用concurrent并发包下的CopyOnWriteArrayList类. ArrayList实现了Serializable接口,因此它支持序列化,能够通过