Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在julia中调用c宏_Julia - Fatal编程技术网

如何在julia中调用c宏

如何在julia中调用c宏,julia,Julia,我知道你可以用ccall调用函数,用cglobal获取指向全局符号的指针。但是如何访问宏呢 例如,我不想复制这段代码 clock_t start = clock(); clock_t end = clock(); float seconds = (float)(end - start) / CLOCKS_PER_SEC; 如何在结束时执行CLOCKS\u PER\u SEC宏?CLOCKS\u PER\u SEC是标准头文件time.h中定义的常量 最好使用Julia中可用的计时工具,并将程序

我知道你可以用ccall调用函数,用cglobal获取指向全局符号的指针。但是如何访问宏呢

例如,我不想复制这段代码

clock_t start = clock();
clock_t end = clock();
float seconds = (float)(end - start) / CLOCKS_PER_SEC;

如何在结束时执行CLOCKS\u PER\u SEC宏?

CLOCKS\u PER\u SEC
是标准头文件
time.h
中定义的常量

最好使用Julia中可用的计时工具,并将程序保持在一种语言中(正如伟大的语言所期望的那样)。但是如果您坚持,您可以创建以下简单的C程序:

#include <stdio.h>
#include <time.h>

int main(int argc, char** argv) {
    printf("%ld\n",CLOCKS_PER_SEC);
  return 0;
}
假设系统将在特定的计算机上运行,或者不使用外部C依赖项长时间维护,则只获取一次数字并将其作为常量插入Julia程序可能更简单


另外,Julia代码与0.7版本相关,在早期版本中,请使用
readstring(…)
而不是
read(…,String)

另一个答案,Julia可能是(尝试一下):


这个答案假设
每秒时钟数
是10的幂,这似乎是普遍的情况。注意,
for
内部循环用于浪费处理时间,而不是墙壁时间,这可能会被
睡眠

浪费。如果要从Julia创建一个完整的C库进行访问,则可以从库中导出
时钟每秒
的值(在导出函数等时)根据时钟,每秒被假定为一个宏,而不是一个常量。@Nozdrum它是一个宏常量(即
#定义每秒时钟((时钟)1000000)
在我的系统上。此外,头文件中的一条注释说:在所有符合XSI的系统上,时钟每秒的值必须是100万。因此,基本上,它是100万。如果您设法找到一个具有不同时钟每秒的系统,我会感到惊讶。在任何情况下,外部程序方法仍然有效。具体是什么您试图解决的问题?在64位windows 7上,msvc
#每秒定义时钟((clock_t)1000)
和clock_t只是一个typedef很长一段时间。我同意您的解决方案会起作用,但它不是一个好的解决方案。与Julia方式不同,您坚持使用C接口,这不是一个好的选择。Julia方式是(复制粘贴以下内容):
tic();println(“做点什么”);sleep(1);println(“做点什么”);seconds=toq()
你最终是如何解决这个问题的?@DanGetz我放弃了。你真的尝试过我的建议吗?例如,第二个答案完全在Julia内部工作,没有外部复杂因素?你可以一直在设置中插入值manually@DanGetz我的问题是如何调用c宏,给出的c代码是一个示例和y我们的答案是对这个例子的回答,而不是如何从julia那里调用c宏。注意:没有为每个操作系统手工编译每个宏。
julia> clocks_per_sec = parse(Int,read(`./clocks_per_sec`,String))
1000000
for i=1:10
    b = 10^i
    tic()
    s = 0
    start = ccall(:clock,Clonglong,())
    for i=1:b
        s+=i
    end
    t = toq()
    stop = ccall(:clock,Clonglong,())
    if t>1.0
        println("CLOCK_PER_SEC most probably is ",10^(round(Int,log10((stop-start)/t))))
        break
    end
end