make內建函式call

2021-10-12 14:23:30 字數 884 閱讀 7688

在make中,內建函式call用來擴充套件變數或者巨集,它的語法如下:

$(call macro-name[, param1 ...])
call會擴充套件它的第乙個引數並把其餘引數依次替換到出現$1、$2 ......的地方,macro-name 可以是任何巨集或變數的名稱。macro-name之後是巨集的引數,並以逗號為分隔符。

call的第乙個引數是乙個非擴充套件式變數名稱,即它並非以乙個美元符號開始。call的引數檢查機制非常簡單,你可以為call指定任意多個引數。如果乙個巨集引用了乙個引數$n,但是呼叫它的call例項並未指定相應的引數,那麼該變數就會變成空值。如果call例項所指定的引數比巨集的$n引用還多,那麼在巨集中並不會擴充套件額外的引數。

使用示例:

makefile:

tbl = ./syscall_32.tbl

systbl = ./systbl.sh

changed = true

if_changed = $(if $changed, $(call $(1)) $< $@, @:)

a.h:$(tbl) $(systbl)

$(call if_changed, systbl)

systbl.sh:

#!/bin/sh

in="$1"

out="$2"

echo "begin to generate $out from $in ..."

執行結果:

$ make

./systbl.sh syscall_32.tbl a.h

begin to generate a.h from syscall_32.tbl ...

對內建函式make和new的理解

make用於內建型別 map slice 和channel 的記憶體分配。new用於各種型別的記憶體分配。new就是new 跟所有語言的new一樣的,make主要是用來處理chan 和陣列切片和map對於new出來的結構體會進行初始化,但是如果new乙個切片型別的 new int 那麼這個切片是沒有...

go內建函式new和make的區別

new 內建函式分配記憶體。其第乙個實參為型別,而非值,其返回值為指向該型別的新分配的零值的指標。make 內建函式分配並初始化乙個型別為且僅為slice map 或chan的物件。與 new 相同的是,其第乙個實參為型別,而非值。不同的是,make 的返回型別 與其引數相同,而非指向它的指標。其具...

JS重寫內建 call 方法

let obj function fn params console.log fn.call obj,引數1 引數2 引數n 返回值 this指向了.call 的第乙個引數。2.從第二個引數到最後乙個引數,會對 fn 進行傳參。3.執行函式 fn let obj function fn params...