- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试编译 Donald Knuth 的程序之一 http://www-cs-faculty.stanford.edu/~uno/programs/grayspan.w 。
我使用的是 Ubuntu,我安装了 Marc van Leeuwen 版本的 CWEB,它使用 ctanglex 和 cweavex,我还安装了斯坦福 Graphbase。
在命令行我输入; ctanglex Grayspan.w
这会生成一个文件; greyspan.c
但是,当我编译时(gcc Grayspan.c -o Grayspan
)我收到此错误
grayspan.c:1:23: error: expected ‘)’ before ‘>’ token
#define verbose (argc>2)
命令 ctanglex Grayspan.w
的输出是;
ctanglex grayspan.w
This is CTANGLE (Version x3.04)
*1
! `@f', `@d', `@h', and `@c' are ignored in section body. (l. 32)
@h
*4*6*16*18
Writing the output file (grayspan.c):..
Done.
(Pardon me, but I think I spotted something wrong)
gcc Grayspan.c -o Grayspan
的完整输出是;
grayspan.c:1:22: error: expected ‘)’ before ‘>’ token
#define verbose (argc>2)
^
grayspan.w: In function ‘print_arcs’:
grayspan.w:125:1: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘long int’ [-Wformat=]
printf(" %d (to %s)\n",a->len,a->tip->name);
^
grayspan.w: In function ‘print_a’:
grayspan.w:348:1: warning: format ‘%d’ expects argument of type ‘int’, but argument 3 has type ‘long int’ [-Wformat=]
k,aa(k)->len, aa(k)->tip->name, mate(aa(k))->tip->name);
^
grayspan.w: In function ‘main’:
grayspan.w:55:1: warning: format ‘%d’ expects argument of type ‘int’, but argument 4 has type ‘long int’ [-Wformat=]
argv[1],panic_code);
^
grayspan.w:233:1: warning: format ‘%d’ expects argument of type ‘int’, but argument 3 has type ‘long int’ [-Wformat=]
l,e->len,v->name,v->deg);
^
grayspan.w:233:1: warning: format ‘%d’ expects argument of type ‘int’, but argument 5 has type ‘long int’ [-Wformat=]
grayspan.w:205:1: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘long int’ [-Wformat=]
for (k=1;k<n;k++) printf(" %d",aa(k)->len);
^
grayspan.w:206:1: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘long int’ [-Wformat=]
if (extraverbose && change_e) printf(" (-%d+%d)\n",change_e->len,e->len);
^
grayspan.w:206:1: warning: format ‘%d’ expects argument of type ‘int’, but argument 3 has type ‘long int’ [-Wformat=]
grayspan.w:208:1: warning: format ‘%d’ expects argument of type ‘int’, but argument 3 has type ‘long int’ [-Wformat=]
}@+else printf("%.15g: -%d+%d\n",count,change_e->len,e->len);
^
grayspan.w:208:1: warning: format ‘%d’ expects argument of type ‘int’, but argument 4 has type ‘long int’ [-Wformat=]
grayspan.w:254:1: warning: format ‘%d’ expects argument of type ‘int’, but argument 3 has type ‘long int’ [-Wformat=]
l,e->len,v->name,v->deg);
^
grayspan.w:254:1: warning: format ‘%d’ expects argument of type ‘int’, but argument 5 has type ‘long int’ [-Wformat=]
grayspan.w:272:1: warning: format ‘%d’ expects argument of type ‘int’, but argument 3 has type ‘long int’ [-Wformat=]
l,e->len,u->name);
^
grayspan.w:277:1: warning: format ‘%d’ expects argument of type ‘int’, but argument 3 has type ‘long int’ [-Wformat=]
l,e->len,e->link->len!=e->len? e->link->len: e->link->link->len);
^
grayspan.w:277:1: warning: format ‘%d’ expects argument of type ‘int’, but argument 4 has type ‘long int’ [-Wformat=]
grayspan.w:288:1: warning: format ‘%d’ expects argument of type ‘int’, but argument 3 has type ‘long int’ [-Wformat=]
if (extraverbose) printf("level %d: %d is a bridge\n",l,e->len);
^
grayspan.w:302:1: warning: format ‘%d’ expects argument of type ‘int’, but argument 3 has type ‘long int’ [-Wformat=]
if (extraverbose) printf("level %d: deleting %d\n",l,e->len);
^
grayspan.w:310:1: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘long int’ [-Wformat=]
if (extraverbose) printf("undeleting %d\n",e->len);'
文件grayspan.c;对于所有不会点击外部链接的人;
#define verbose (argc>2)
#define extraverbose (argc>3)
#define o mems++
#define oo mems+=2
#define ooo mems+=3
#define oooo mems+=4
#define ooooo mems+=5
#define deg u.I
#define prev a.A
#define mate(e)(edge_trick&(siz_t)(e)?(e)-1:(e)+1)
#define aa(l)(g->vertices+l)->z.A
#define del(l)(g->vertices+l)->y.A
#define link b.A
#define delete(e)ee=e,oooo,ee->prev->next=ee->next,ee->next->prev=ee->prev
#define undelete(e)ee=e,oooo,ee->next->prev=ee,ee->prev->next=ee
#define bfs v.V
#define sentinel (g->vertices)
/*1:*/
#line 30 "grayspan.w"
#include "gb_graph.h"
#include "gb_save.h"
double mems;
double count;/*5:*/
#line 120 "grayspan.w"
void print_arcs(Vertex*v)
{
register Arc*a;
printf("Arcs leading from %s:\n",v->name);
for(a=v->arcs->next;a->tip;a=a->next)
printf(" %d (to %s)\n",a->len,a->tip->name);
}/*:5*//*17:*/
#line 343 "grayspan.w"
void print_a(register Graph*g)
{
register int k;
for(k=1;k<g->n;k++)
printf(" a%d=%d (%s -- %s)\n",
k,aa(k)->len,aa(k)->tip->name,mate(aa(k))->tip->name);
}/*:17*/
#line 35 "grayspan.w"
main(int argc,char*argv[])
{/*3:*/
#line 62 "grayspan.w"
register Graph*g;
register int n;
register int k;
register Vertex*u,*v,*w;
register Arc*e,*ee,*f,*ff;/*:3*//*8:*/
#line 197 "grayspan.w"
register int l;
Arc*change_e;/*:8*/
#line 38 "grayspan.w"
;/*2:*/
#line 47 "grayspan.w"
if(argc<2){
fprintf(stderr,"Usage: %s foo.gb [[gory] details]\n",argv[0]);
exit(1);
}
g=restore_graph(argv[1]);
if(!g){
fprintf(stderr,
"Sorry, can't create the graph from file %s! (error code %d)\n",
argv[1],panic_code);
exit(-1);
}
n=g->n;/*4:*/
#line 89 "grayspan.w"
if(verbose)printf("Graph %s has the following edges:\n",g->id);
for(v=g->vertices,k=0;v<g->vertices+n;v++){
f=gb_virgin_arc();f->next=v->arcs;
for(v->deg=0,e=v->arcs,v->arcs=f;e;v->deg++,f=e,e=e->next){
e->prev=f;
u=e->tip;
if(u==v){
fprintf(stderr,"Oops, there's a loop from %s to itself!\n",v->name);
exit(-3);
}
if(mate(e)->tip!=v){
fprintf(stderr,"Oops: There's an arc from %s to %s,\n",u->name,v->name);
fprintf(stderr," but the edge trick doesn't find the opposite arc!\n");
exit(-4);
}
if(u>v){
e->len=mate(e)->len= ++k;
if(verbose)printf(" %d: %s -- %s\n",k,v->name,u->name);
}
}
v->arcs->prev=f,f->next=v->arcs;
if(v->deg==0){
fprintf(stderr,"Graph %s has an isolated vertex %s!\n",
g->id,v->name);
exit(-5);
}
}/*:4*/
#line 59 "grayspan.w"
;/*:2*/
#line 39 "grayspan.w"
;/*16:*/
#line 322 "grayspan.w"
for(v=g->vertices+1;v<g->vertices+n;v++)v->bfs=NULL;
for(k=n-1,o,w=v=g->vertices,w->bfs=sentinel;;o,v=w,w=w->bfs){
for(oo,e=v->arcs->next;o,u=e->tip;o,e=e->next)
if(o,u->bfs==NULL){
o,aa(k)=e,k--;
if(k==0)goto connected;
o,u->bfs=w,w=u;
}
if(w==sentinel)break;
}
printf("Oops, the graph isn't connected!\n");exit(0);
connected:for(u=g->vertices;u<g->vertices+n;u++)o,u->bfs=NULL;
if(extraverbose){
printf("Depth-first search yields the following spanning tree:\n");
print_a(g);
}
if(verbose)printf("(%.15g mems for initialization)\n",mems);/*:16*/
#line 40 "grayspan.w"
;/*7:*/
#line 175 "grayspan.w"
change_e=NULL;
v=g->vertices;
for(l=1;l<n-1;l++){
o,del(l)=NULL;
enter:ooo,e=aa(l+1),u=e->tip,v=mate(e)->tip;
if(oo,u->deg>v->deg)v=u,e=mate(e),u=e->tip;/*10:*/
#line 226 "grayspan.w"
oo,k=u->deg+v->deg;
for(o,f=u->arcs->next,ff=NULL;o,f->tip;o,f=f->next)
if(f->tip==v)delete(f),delete(mate(f)),k-=2,o,f->link=ff,ff=f;
else o,mate(f)->tip=v;
oo,e->link=ff,v->deg=k;
if(extraverbose)
printf("level %d: Shrinking %d; now %s has degree %d\n",
l,e->len,v->name,v->deg);
o,ff=v->arcs;
oooo,f->prev->next=ff->next,ff->next->prev=f->prev;
ooo,f->next->prev=ff,ff->next=f->next;/*:10*/
#line 181 "grayspan.w"
;
o,aa(l)=e;
}
for(o,e=v->arcs->next;o,e->tip;o,e=e->next){
o,aa(l)=e;/*9:*/
#line 201 "grayspan.w"
count++;
if(verbose){
if(!change_e||extraverbose){
printf("%.15g:",count);
for(k=1;k<n;k++)printf(" %d",aa(k)->len);
if(extraverbose&&change_e)printf(" (-%d+%d)\n",change_e->len,e->len);
else printf("\n");
}else printf("%.15g: -%d+%d\n",count,change_e->len,e->len);
}/*:9*/
#line 186 "grayspan.w"
;
change_e=e;
}
for(l--;l;l--){
e=aa(l),u=e->tip,v=mate(e)->tip;/*11:*/
#line 245 "grayspan.w"
oo,f=u->arcs,ff=v->arcs;
ooo,ff->next=f->prev->next;o,ff->next->prev=ff;
ooo,f->prev->next=f,f->next->prev=f;
for(f=f->prev;o,f->tip;o,f=f->prev)o,mate(f)->tip=u;
for(oo,f=e->link,k=v->deg;f;o,f=f->link)
k+=2,undelete(mate(f)),undelete(f);
oo,v->deg=k-u->deg;
if(extraverbose)
printf("level %d: Unshrinking %d; now %s has degree %d\n",
l,e->len,v->name,v->deg);/*:11*/
#line 191 "grayspan.w"
;/*12:*/
#line 270 "grayspan.w"
if(o,u->deg==1){
if(extraverbose)printf("level %d: %d is a bridge with endpoint %s\n",
l,e->len,u->name);
goto bridge;
}
if(o,e->link->link){
if(extraverbose)printf("level %d: %d is parallel to %d\n",
l,e->len,e->link->len!=e->len?e->link->len:e->link->link->len);
goto nonbridge;
}
for(o,u->bfs=v,w=u;u!=v;o,u=u->bfs){
for(oo,f=u->arcs->next;o,f->tip;o,f=f->next)
if(o,f->tip->bfs==NULL){
if(f->tip==v){
if(f!=mate(e))/*13:*/
#line 296 "grayspan.w"
{
for(o,u=e->tip;u!=v;o,u->bfs=NULL,u=w)o,w=u->bfs;
goto nonbridge;
}/*:13*/
#line 284 "grayspan.w"
;
}else oo,f->tip->bfs=v,w->bfs=f->tip,w=f->tip;
}
}
if(extraverbose)printf("level %d: %d is a bridge\n",l,e->len);
for(o,u=e->tip;u!=v;o,u->bfs=NULL,u=w)o,w=u->bfs;
goto bridge;
nonbridge:change_e=e;/*14:*/
#line 302 "grayspan.w"
if(extraverbose)printf("level %d: deleting %d\n",l,e->len);
ooo,e->link=del(l),del(l)=e;
delete(e),delete(mate(e)),oo,e->tip->deg--,v->deg--;
goto enter;/*:14*/
#line 292 "grayspan.w"
;
bridge:/*:12*/
#line 192 "grayspan.w"
;/*15:*/
#line 308 "grayspan.w"
for(o,e=del(l);e;o,e=e->link){
oooo,mate(e)->tip->deg++,e->tip->deg++,undelete(mate(e)),undelete(e);
if(extraverbose)printf("undeleting %d\n",e->len);
}/*:15*/
#line 193 "grayspan.w"
;
}/*:7*/
#line 41 "grayspan.w"
;
printf("Altogether %.15g spanning trees, using %.15g mems.\n",count,mems);
exit(0);
}/*:1*/
最佳答案
首先,您需要安装斯坦福图库 ( http://ftp.cs.stanford.edu/pub/sgb/sgb.tar.gz ) 和 ctangle
(大多数 Linux 发行版上的 Tex Live 软件包的一部分)。
解压缩 SGB 并在其目录中运行 maketests
将生成必要的包含文件和源文件(应该可以在任何像样的 Linux 上开箱即用)。
将grayspan.w
放入SGB目录中。对其调用 ctangle
以获得 grayspan.c
。
You may need to use a text editor to replace all occurrences of word "verbose" in
grayspan.c
with something else ("overbose" or something). This is becausegb_graph.h
now defines a global variable named "verbose". However, if everything is done as described hereby, this should not be necessary.
调用
gcc -m32 -o grayspan grayspan.c gb_graph.c gb_save.c gb_io.c
您将收到一定数量的非严重警告(如果您关心,很容易修复)和一个有效的“grayspan”程序。
关于c - 如何编译 Knuth 的程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33091590/
#include using namespace std; class C{ private: int value; public: C(){ value = 0;
这个问题已经有答案了: What is the difference between char a[] = ?string?; and char *p = ?string?;? (8 个回答) 已关闭
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 7 年前。 此帖子已于 8 个月
除了调试之外,是否有任何针对 c、c++ 或 c# 的测试工具,其工作原理类似于将独立函数复制粘贴到某个文本框,然后在其他文本框中输入参数? 最佳答案 也许您会考虑单元测试。我推荐你谷歌测试和谷歌模拟
我想在第二台显示器中移动一个窗口 (HWND)。问题是我尝试了很多方法,例如将分辨率加倍或输入负值,但它永远无法将窗口放在我的第二台显示器上。 关于如何在 C/C++/c# 中执行此操作的任何线索 最
我正在寻找 C/C++/C## 中不同类型 DES 的现有实现。我的运行平台是Windows XP/Vista/7。 我正在尝试编写一个 C# 程序,它将使用 DES 算法进行加密和解密。我需要一些实
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
有没有办法强制将另一个 窗口置于顶部? 不是应用程序的窗口,而是另一个已经在系统上运行的窗口。 (Windows, C/C++/C#) 最佳答案 SetWindowPos(that_window_ha
假设您可以在 C/C++ 或 Csharp 之间做出选择,并且您打算在 Windows 和 Linux 服务器上运行同一服务器的多个实例,那么构建套接字服务器应用程序的最明智选择是什么? 最佳答案 如
你们能告诉我它们之间的区别吗? 顺便问一下,有什么叫C++库或C库的吗? 最佳答案 C++ 标准库 和 C 标准库 是 C++ 和 C 标准定义的库,提供给 C++ 和 C 程序使用。那是那些词的共同
下面的测试代码,我将输出信息放在注释中。我使用的是 gcc 4.8.5 和 Centos 7.2。 #include #include class C { public:
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
我的客户将使用名为 annoucement 的结构/类与客户通信。我想我会用 C++ 编写服务器。会有很多不同的类继承annoucement。我的问题是通过网络将这些类发送给客户端 我想也许我应该使用
我在 C# 中有以下函数: public Matrix ConcatDescriptors(IList> descriptors) { int cols = descriptors[0].Co
我有一个项目要编写一个函数来对某些数据执行某些操作。我可以用 C/C++ 编写代码,但我不想与雇主共享该函数的代码。相反,我只想让他有权在他自己的代码中调用该函数。是否可以?我想到了这两种方法 - 在
我使用的是编写糟糕的第 3 方 (C/C++) Api。我从托管代码(C++/CLI)中使用它。有时会出现“访问冲突错误”。这使整个应用程序崩溃。我知道我无法处理这些错误[如果指针访问非法内存位置等,
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 7 年前。
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,因为
我有一些 C 代码,将使用 P/Invoke 从 C# 调用。我正在尝试为这个 C 函数定义一个 C# 等效项。 SomeData* DoSomething(); struct SomeData {
这个问题已经有答案了: Why are these constructs using pre and post-increment undefined behavior? (14 个回答) 已关闭 6
我是一名优秀的程序员,十分优秀!