小编Suu*_*aku的帖子

C:使用clock()来测量多线程程序中的时间

我一直用clock()来测量我的应用程序从开始到结束的时间,因为;

int main(int argc, char *argv[]) {
  const clock_t START = clock();

  // ...

  const double T_ELAPSED = (double)(clock() - START) / CLOCKS_PER_SEC;
}
Run Code Online (Sandbox Code Playgroud)

由于我已经开始使用POSIX线程,这似乎失败了.看起来clock()用N个线程增加N倍.由于我不知道将同时运行多少个线程,因此这种方法失败了.那么如何衡量已经过了多少时间呢?

c

48
推荐指数
1
解决办法
5万
查看次数

在C++中抛出范围异常

这段代码有效;

int at(int index) {
  if(index < 1 || index >= size)
    throw 0;

  return x[index];
}
Run Code Online (Sandbox Code Playgroud)

但事实并非如此

int at(int index) {
  if(index < 1 || index >= size)
    throw std::out_of_range;

  return x[index];
}
Run Code Online (Sandbox Code Playgroud)

我得到错误"在'之前预期的主要表达';'".现在......它让我感到惊讶,因为我知道std :: out_of_range存在并且我有

#include <stdexcept>
Run Code Online (Sandbox Code Playgroud)

c++ exception

25
推荐指数
1
解决办法
7万
查看次数

套从地图的钥匙

我有一张地图X,我正在尝试获得一组满足某种条件的键,如下所示:

Map.Keys X
|> Set.filter (fun x -> ...)
Run Code Online (Sandbox Code Playgroud)

...但我无法找到从F#的Map集合中获取密钥的方法.

f# hashtable

21
推荐指数
1
解决办法
5754
查看次数

寻找功能语言

我是一名主要使用C++的科学家,但我希望找到更好的语言.我正在寻找建议,我甚至不确定我的"梦想语言"是否存在,但这是我的愿望清单;

重要特征 (按重要性排序)

1.1:表现:对于科学,表现非常重要.我完全理解生产力的重要性,而不仅仅是执行速度,但是当你的程序必须运行几个小时时,你就无法用Python或Ruby编写它.它不需要像C++一样快,但它必须相当接近(例如:Fortran,Java,C#,OCaml ......).

1.2:高水平和优雅:我希望能够尽可能地集中精力学习科学并获得清晰的代码.我也不喜欢像Java那样的冗长语言.

1.3:功能完备:我喜欢函数式编程,我认为它非常适合我的风格和科学编程.我不在乎语言是否支持命令式编程,它可能是一个优点,但它必须集中并鼓励函数式编程.

1.4:可移植性:应该在Linux(特别是Linux!),Mac和Windows上运行良好.不,我不认为F#在单声道Linux上运行良好,我不确定OCaml在windows上运行良好;)

1.5:面向对象,最好是在"一切都是对象"的哲学下:我意识到在不久前我不得不处理纯C的时候,我更喜欢面向对象的编程.我喜欢对面向对象编程有强烈承诺的语言,而不仅仅是胆小的支持.

不是很重要,但是那些事情会很好

2.1:"不太强"的打字:我发现Haskell强大的打字系统很烦人,我喜欢能够做一些隐式转换.

2.2:工具:好的工具总是有利的,但我想这实际上取决于语言.我使用轻量级编辑Geany与Haskell一起玩,我从未感到残疾.另一方面,我不会用Java甚至Scala做同样的事情(特别是Scala似乎缺乏好的工具,这实在是太遗憾了).Java在这里确实是第一语言,使用NetBeans和Javadoc,使用Java编程非常简单有趣.

2.3:收集垃圾,但在没有虚拟机的情况下进行翻译或编译.我没有反对虚拟机,但域中的两个巨头都有他们的问题.在纸面上,.net框架看起来好多了,特别适合函数式编程,但在实践中它仍然以Windows为中心,对Linux/MacOS的支持很糟糕,并不是应该的,所以它并不值得考虑.Java现在是一个成熟的虚拟机,但它在某些层面上让我很烦恼:我不喜欢它处理可执行文件,泛型的方式,并且它编写了可怕的GUI(虽然这些东西并不是那么糟糕).

programming-languages functional-programming

16
推荐指数
4
解决办法
1834
查看次数

多个定义和仅限标头的库

我有一个带有几个c和h文件的C程序.我决定将程序的一部分设置为"仅限标题",因此我将代码从c移到了h.现在我得到了多重定义问题,我不明白为什么.例如:

main.c includes utils.h
vector.c includes utils.h
Run Code Online (Sandbox Code Playgroud)

我将utils.c中的所有内容移动到utils.h(当然从项目中删除了utils.c).utils.h以.开头

#ifndef UTILS_H_
#define UTILS_H_

// and end with:
#endif
Run Code Online (Sandbox Code Playgroud)

为了确保我的后卫是独一无二的,我尝试改变它(例如:UTILS718171_H_),但它不起作用.

仍然,编译器抱怨:

/tmp/ccOE6i1l.o: In function `compare_int':
ivector.c:(.text+0x0): multiple definition of `compare_int'
/tmp/ccwjCVGi.o:main.c:(.text+0x660): first defined here
/tmp/ccOE6i1l.o: In function `compare_int2':
ivector.c:(.text+0x20): multiple definition of `compare_int2'
/tmp/ccwjCVGi.o:main.c:(.text+0x6e0): first defined here
/tmp/ccOE6i1l.o: In function `matrix_alloc':
ivector.c:(.text+0x40): multiple definition of `matrix_alloc'
/tmp/ccwjCVGi.o:main.c:(.text+0x0): first defined here
...
Run Code Online (Sandbox Code Playgroud)

问题可能是这样的:所有c文件都被编译并获得自己的代码版本,然后在链接时会导致问题,但我老实说不知道如何解决这个问题.

c include multiple-definition-error

15
推荐指数
4
解决办法
2万
查看次数

用C++编译的C代码:未定义的引用

我有一个小程序,我可以毫无困难地使用GCC和ICC编译,但我也希望代码能够与G ++和ICPC一起使用.我试着添加这个:

#ifdef __cplusplus
  extern "C" {
#endif
Run Code Online (Sandbox Code Playgroud)

在开头和这个:

#ifdef __cplusplus
  }
#endif
Run Code Online (Sandbox Code Playgroud)

在所有头文件的末尾,但我仍然得到几个`未定义的引用"..."'错误.

c c++ include undefined-reference

8
推荐指数
1
解决办法
1万
查看次数

C:运行时的编译器信息

有没有办法打印编译器的名称和用于编译程序的版本,如:

printf("This is compiled with %s version %s\n", COMPILER, COMPILER_VERSION);
Run Code Online (Sandbox Code Playgroud)

c compiler-construction

8
推荐指数
1
解决办法
187
查看次数

C:内联关键字值得吗?

使用inline关键字是否值得,或者编译器足够聪明,知道何时需要内联函数?

c performance inline

8
推荐指数
2
解决办法
3970
查看次数

编程语言复杂性

是否客观衡量编程语言在语法和语义方面的复杂性,而不是语言的复杂程度?

我读过许多主观评论但很少有严谨的分析.

complexity-theory programming-languages

6
推荐指数
3
解决办法
3479
查看次数

Fortran的表现

Fortran在计算机语言基准游戏方面的表现令人惊讶地糟糕.今天的结果将Fortran排在第14和第11位,在单核上进行了两次四核测试,第7次和第10次测试.

现在,我知道基准测试从来都不是完美的,但仍然,Fortran经常被认为是高性能计算的语言,看起来这个基准测试中使用的问题类型应该是Fortran的优势.在最近一篇关于计算物理学的文章中,Landau(2008)写道:

然而,[Java]不像FORTRAN和C那样有效或支持HPC和并行处理,后两者具有高度开发的编译器和更多科学的子程序库.反过来,FORTRAN仍然是HPC的主要语言,FORTRAN 90/95是一种令人惊讶的,现代的,有效的语言; 但是,任何CS部门都很难教授它,编译器也很昂贵.

是不是因为语言枪战使用的编译器(英特尔的Linux免费编译器)?

comparison performance benchmarking fortran

6
推荐指数
1
解决办法
5248
查看次数