我试图通过创建一个简单的+=
宏和iterate
宏来练习在Common Lisp中创建宏.我已经设法+=
轻松地创建宏,我在我的iterate
宏中使用它,我有几个问题.当我尝试运行我的宏时,例如
(iterate i 1 5 1 (print (list 'one i)))
Run Code Online (Sandbox Code Playgroud)
(i
控制变量在哪里,1
是起始值,5
是结束值,1
是增量值).我收到SETQ: variable X has no value
(defmacro += (x y)
(list 'setf x '(+ x y)))
(defmacro iterate (control beginExp endExp incExp &rest body)
(let ( (end (gensym)) (inc (gensym)))
`(do ( (,control ,beginExp (+= ,control ,inc)) (,end ,endExp) (,inc ,incExp) )
( (> ,control ,end) T)
,@ body
)
)
) …
Run Code Online (Sandbox Code Playgroud) 我在网上发现了一段代码,故意在代码中出现错误,这是调试练习的一部分.我已经修复了简单的错误,但有一行我不确定它是否有效.
#include <stdlib.h>
#include <stdio.h>
struct foo {
int size;
int *array;
};
typedef struct foo bar;
bar* readArray(){
bar *fbar = (bar *)malloc(sizeof(bar));
fbar->array = (int *)malloc(sizeof(int)*2); //ADDED THIS LINE FOR TESTING
int i = 0;
int temp;
while(scanf("%d", &temp) == 1){
*(fbar->array + (i-1)) = temp; //THIS LINE HERE
i++;
}
if(i == 0){
printf("No numbers were entered!");
}
fbar->size = i;
return fbar;
}
int main(){
bar *p = readArray();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我尝试运行它当然会导致段错误,因为该示例没有*array的malloc空间.我尝试通过mallocing space for 2 …