小编Jos*_*ein的帖子

如何通过 C 中的 make 更改宏定义

所以我正在制作一个 C 程序,它从数组中获取内存static unsigned char[M_SIZE],其中M_SIZE是宏。我需要做的是能够通过 make 中的命令更改该宏的值,以便有人可以根据传递给 make 的参数使用不同大小的保留内存来编译程序。

我的头文件示例是 DataStore.h

#ifndef DATA_STORE_H
#define DATA_STORE_H

#define M_SIZE 50000 // Need this to be configurable via make arguments

unsigned char* DataStore_get_buf(void);
unsigned char* DataStore_get_end(void);
void DataStore_inc_ptr(void);

#endif
Run Code Online (Sandbox Code Playgroud)

我的示例 C 文件是 DataStore.c

#include "DataStore.h"

static unsigned char DataStore_BUFFER[M_SIZE];
static unsigned char* DataStore_PTR = DataStore_BUFFER;

unsigned char* DataStore_get_buf(void)
{
   return DataStore_BUFFER;
}

unsigned char* DataStore_get_end(void)
{
   return DataStore_BUFFER + M_SIZE;
}

void DataStore_inc_ptr(void)
{
    DataStore_PTR++;
}
Run Code Online (Sandbox Code Playgroud)

所以基本上,我需要一种在程序编译之前通过某些命令或可以传递到 make 的配置来更改 …

c macros makefile

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

在Rust中以相同的变量名称多次使用let关键字

生锈的新手,我已经过了借阅检查器卡住的阶段,但是我对这段代码为什么起作用或通过感到困惑。我正在实现一个类似于结构的枚举,该枚举充当某种形式的节点,可以附加到以下节点:

#[derive(Debug)]
enum Node {
    Val {num:u32, next:Box<Node>},
    Nil
}

impl Node {
    fn put_next(&self, i:u32) -> Node {
       match self {
           Node::Val {num, next:_} => Node::Val {num:*num, next:Box::new(Node::Val {num:i, next:Box::new(Node::Nil)})},
           Node::Nil => Node::Val {num:i, next:Box::new(Node::Nil)}
       }
    }
}
Run Code Online (Sandbox Code Playgroud)

由于main明显的原因,以下函数无法正常工作,您无法将其分配给不可变变量:

fn main() {
   let foo = Node::Val {num:5, next:Box::new(Node::Nil)};
   foo = foo.put_next(30);
   println!("foo {:?} ", foo);
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我let再次与foo一起使用,则代码可以正常运行!

fn main() {
   let foo = Node::Val {num:5, next:Box::new(Node::Nil)};
   let foo = foo.put_next(30);
   println!("foo {:?} ", foo);
} …
Run Code Online (Sandbox Code Playgroud)

move rust

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

如何将 16 字节的内存加载到 Rust __m128i 中?

我正在尝试将 16 字节的内存加载到模块中的__m128i类型中std::arch

#[cfg(all(target_arch = "x86_64", target_feature = "sse2"))]
use std::arch::x86_64::__m128i;

fn foo() {
    #[cfg(all(target_arch = "x86_64", target_feature = "sse2"))]
    use std::arch::x86_64::_mm_load_si128;

    unsafe {
        let mut f: [i8; 16] = [0; 16];
        f[0] = 5;
        f[1] = 66;
        let g = _mm_load_si128(f as *const __m128i);
    }
}

fn main() {
    foo();
}
Run Code Online (Sandbox Code Playgroud)

我的代码导致错误:

error[E0605]: non-primitive cast: `[i8; 16]` as `*const __m128i`
  --> src/main.rs:12:32
   |
12 |         let g = _mm_load_si128(f as *const __m128i);
   |                                ^^^^^^^^^^^^^^^^^^^ an …
Run Code Online (Sandbox Code Playgroud)

sse simd intrinsics rust

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

println在go中变为空字符串

所以我编写了这个小程序,它给图灵机提供指令,并从中打印出选定的单元格:

    package main

import "fmt"
import s "strings"

func main() {
  fmt.Println(processturing("> > > + + + . ."));
}

func processturing(arguments string) string{
    result := ""
    dial := 0
    cells := make([]int, 30000)
    commands := splitstr(arguments, " ")
    for i := 0;i<len(commands);i++ {
        switch commands[i] {
        case ">":
            dial += 1
        case "<":
            dial -= 1
        case "+":
            cells[dial] += 1
        case "-":
            cells[dial] -= 1
        case ".":
            result += string(cells[dial]) + " "
        }
    }
    return result
} …
Run Code Online (Sandbox Code Playgroud)

arrays go

0
推荐指数
1
解决办法
47
查看次数

标签 统计

rust ×2

arrays ×1

c ×1

go ×1

intrinsics ×1

macros ×1

makefile ×1

move ×1

simd ×1

sse ×1