在其他语言中,我使用过Erlang和Python,如果我分割字符串并且不关心其中一个字段,我可以使用下划线占位符.我在Perl中试过这个:
(_,$id) = split('=',$fields[1]);
Run Code Online (Sandbox Code Playgroud)
但是我收到以下错误:
无法修改./generate_datasets.pl第17行中列表赋值中的常量项,靠近");"
由于编译错误,./generate_datasets.pl的执行被中止.
Perl是否有类似的模式,我可以使用而不是创建一个无用的临时变量?
我已经创建了一些使用CoreAudio封装的封装函数,目标是创建一个可以与一些命令行C++工具一起使用的C库.到目前为止,事情进展顺利.我拿了一个示例项目,对其进行了修改,然后在XCode中构建并运行.我想完全跳过XCode并使用gcc和Makefile构建库.
如何链接Apple Framework?框架是否只是共享库,我可以包含在gcc的-l和-L选项中?
我理解锁,互斥和其他同步结构的概念,但它们是如何实现的?它们是由OS提供的,还是这些结构依赖于CPU MMU的特殊CPU指令?
我是来自C++的.NET世界的新手,我正在努力更好地理解属性.我注意到在.NET框架中,Microsoft使用了所有地方的属性.使用属性而不是创建get/set方法是否有优势?当一个人应该使用属性时,是否有一般指南(以及命名约定)?
我正在尝试使用AVR微控制器和avr-ada构建gcc,并且我遇到了一个障碍,因为我的常规编译器对AVR所需的版本过于挑剔.我收到以下警告,这反过来导致gcc或make报告错误:
gcc -c -g -O2 -gnatpg -gnata -nostdinc -I- -I. -Iada
-I../../gcc/ada ../../gcc/ada/exp_ch5.adb -o ada/exp_ch5.o
exp_ch5.adb:177:16: warning: function "Has_Address_Clause" is not referenced
make[2]: *** [ada/exp_ch5.o] Error 1
make[1]: *** [all-gcc] Error 2
make: *** [all] Error 2
Run Code Online (Sandbox Code Playgroud)
有没有办法指示gcc或使警告不失败?
我正在寻找一个在裸CPU(x86),32位保护模式和无操作系统上运行的硬件调试工具.由于时间限制,我不会在x86程序集中编写所有工具.我喜欢Ada语言(但对它缺乏经验)并且认为在这个项目中使用Ada而不是C可能会很有趣.
使用C,可以使用内联汇编或调用汇编中的子程序来访问BIOS,以获取键盘I/O等基本内容或在屏幕上显示文本.Ada有类似的能力吗?如果是这样,有没有人知道调用汇编方法和链接它们的任何资源或教程?
使用Ada,我可以使用.ads和.adb文件将模块化单元拆分为规格和主体.
是否可以分离VHDL实体和架构?如果是这样,是否有命名约定或推荐的样式?实体可以放在自定义库/包中吗?
我试图转换一些Verilog代码,从UART模块的更快时钟产生更慢的时钟.原始的verilog代码基于fpga4fun.com上的模块,这是我尝试将其翻译为基于VHDL的设计.
entity baud_generator is
generic(
f_clk : integer := 50000000; -- default: 50 MHz
baud : integer := 115200; -- default: 115,200 baud
accum_width : integer := 16;
accum_inc : integer := (baud sll accum_width) / f_clk
);
port(
clock : in std_logic;
reset_n : in std_logic;
enable : in std_logic;
baud_clock : out std_logic
);
end entity baud_generator;
Run Code Online (Sandbox Code Playgroud)
但是,我的编译器Aldec-HDL不喜欢以下行:
accum_inc : natural := (baud sll accum_width) / f_clk
Run Code Online (Sandbox Code Playgroud)
这是确切的错误消息:
# Error: COMP96_0300: baud_generator.vhd : (20, 52): Cannot reference "f_clk" …Run Code Online (Sandbox Code Playgroud) 我在包可见性方面遇到了问题。我有一个非常简单的包,下面列出了代码。错误消息显示在此处:
viterbi.adb:12:14: "Integer_Text_IO" is not visible (more references follow)
viterbi.adb:12:14: non-visible declaration at a-inteio.ads:18
gnatmake: "viterbi.adb" compilation error
Run Code Online (Sandbox Code Playgroud)
包装规格如下:
package Viterbi is
procedure Load_N_File(
Filename : in String;
N : in out Integer;
M : in out Integer);
end Viterbi;
Run Code Online (Sandbox Code Playgroud)
包体如下:
with Ada.Integer_Text_IO; use with Ada.Integer_Text_IO;
with Ada.Strings; use Ada.Strings;
package body Viterbi is
procedure Load_N_File(
Filename : in String;
N : in out Integer;
M : in out Integer
) is
N_File : File_Type;
begin
Open( N_File, Mode=>In_File, Name=>Filename …Run Code Online (Sandbox Code Playgroud) 我很长时间都在学习Ada的C++程序员.如果以下任何一种形式不好,请随时指出.我正在努力学习Ada做事的方法,但旧习惯很难打破(我想念Boost!)
我正在尝试加载包含整数,空格和字符串的文件.可能有更好的方法来做到这一点,但我认为我应该将该行加载到一个字符串缓冲区,我知道它不会超过80个字符.我在适当的地方声明了如下的缓冲区变量:
Line_Buffer : String(1..80);
Run Code Online (Sandbox Code Playgroud)
打开文件后,我遍历每一行并在空格字符处拆分缓冲区:
while not Ada.Text_IO.End_Of_File(File_Handle) loop
Ada.Text_IO.Get_Line(File_Handle, Item=>Line_Buffer, Last=>Last);
-- Break line at space to get match id and entry
for String_Index in Line_Buffer'Range loop
if Line_Buffer(String_Index) = ' ' then
Add_Entry(Root_Link=>Root_Node,
ID_String=> Line_Buffer(1..String_Index-1),
Entry_String=> Line_Buffer(String_Index+1..Last-1)
);
end if;
end loop;
end loop;
Run Code Online (Sandbox Code Playgroud)
Add_Entry中发生的事情并不重要,但其规范如下所示:
procedure Add_Entry(
Root_Link : in out Link;
ID_String : in String;
Entry_String : in String);
Run Code Online (Sandbox Code Playgroud)
我想使用无界字符串而不是有界字符串,因为我不想担心必须在这里和那里指定大小.这编译并正常工作,但在Add_Entry中,当我尝试遍历Entry_String中的每个字符时,而不是从1开始的索引,它们从原始字符串中的偏移量开始.例如,如果Line_Buffer为"14 silicon",如果我循环如下,则索引从4到10.
for Index in Entry_String'Range loop
Ada.Text_IO.Put("Index: " & Integer'Image(Index));
Ada.Text_IO.New_Line;
end loop;
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法来进行这种解析,以便传递给Add_Entry的字符串具有以1开头的边界?另外,当我将切片字符串作为"in"参数传递给过程时,是在堆栈上创建的副本,还是对所用原始字符串的引用?