小编tec*_*ury的帖子

Swift 编译器错误:在范围内找不到变量

在 Xcode 12.0.1 中编写最简单的 swift 程序时,我遇到了一个奇怪的错误。 在此处输入图片说明

它说当它在范围内时它无法在范围内找到 T1。我觉得解决这个问题一定是微不足道的,我试过?+ ? + K 并关闭 Xcode 并重新打开,但问题仍然存在。任何人都知道如何解决这个问题?

xcode swift

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

argc在C程序中给出错误的值

我想在运行时输入一些命令行参数.喜欢

./program abc def ghi
Run Code Online (Sandbox Code Playgroud)

argc在这种情况下将是4.没问题.但如果我这样做

./program abc def *
Run Code Online (Sandbox Code Playgroud)

甚至

./program * abc def
Run Code Online (Sandbox Code Playgroud)

变量argc给我一个远大于4的值.

在打印整个argv数组(不考虑第0个参数; ./program)作为字符串时,我会得到一个列表,其中前两个元素是abc,def而其他元素都是工作目录中包含的文件的文件名.

我正在尝试从K&R学习C语言.我试图制作一个RPN计算器,我们可以给出类似的表达式./program 2 4 *.

这是什么原因?或者我错了?

c shell argc osx-mavericks

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

如果我们只对 64 位寄存器的低 4 字节进行 mov 操作,那么它的高 4 字节是否设置为零

我正在从《计算机系统:程序员的视角》学习 x86-64 汇编,并且遇到了一个练习,要求将一行 C 代码转换为(两个)等效的汇编指令。该代码是关于使用指针将一种类型的变量复制到另一种类型的变量。

指针变量声明如下:

src_t *sp; //src_t and dest_t are typedefs
dest_t *dp;
Run Code Online (Sandbox Code Playgroud)

需要翻译的C代码是:

*dp = (dest_t)*sp;
Run Code Online (Sandbox Code Playgroud)

假设指针sp和分别dp存储在寄存器%rdi%rsi中,并且我们应该设置%rax(例如 、%eax%ax)的“适当部分”%al来进行中间数据复制(因为 x86-64 不允许源和目标同时复制)是内存引用)。

现在,当src_tisunsigned chardest_tis 时long,我为其编写了以下汇编代码:

movzbq (%rdi), %rax //move a byte into %rax with zero extension
movq %rax, (%rsi) //move 8 bytes of 'long' data 
Run Code Online (Sandbox Code Playgroud)

但这本书以及Godboltgcc (与 一起使用-O3)都说它应该是

movzbl  (%rdi), %eax …
Run Code Online (Sandbox Code Playgroud)

c assembly gcc x86-64

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

标签 统计

c ×2

argc ×1

assembly ×1

gcc ×1

osx-mavericks ×1

shell ×1

swift ×1

x86-64 ×1

xcode ×1