所以我正在制作一个 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 的配置来更改 …
生锈的新手,我已经过了借阅检查器卡住的阶段,但是我对这段代码为什么起作用或通过感到困惑。我正在实现一个类似于结构的枚举,该枚举充当某种形式的节点,可以附加到以下节点:
#[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) 我正在尝试将 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) 所以我编写了这个小程序,它给图灵机提供指令,并从中打印出选定的单元格:
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)