gs中的宏
本文介绍gs中的常用宏。所有宏均区分大小写,且都以双下划线开头,双下划线结尾。
假设本gs文件 test.gs
位于路径 ./test_scripts/path/test.gs
中, /r 设置的根目录为 ./test_scripts
, 当前宏位于第 3 行, 在 test_func
函数中。
__FILE__
__FILE__
宏展开后为相对于 /r 设置的根路径的当前文件路径 + 当前文件名。
参照假设,宏展开结果为/path/test.gs
。
__PURE_FILE__
__PURE_FILE__
宏展开后为当前文件的文件名。
参照假设,宏展开结果为test.gs
。
__DIR__
__DIR__
宏展开后为相对于 /r 设置的根路径的当前文件路径。
参照假设,宏展开结果为/path/
。
__LINE__
__LINE__
宏展开后为当前所在的行号。
参照假设,宏展开结果为3
。
__LOCATION__
__LOCATION__
宏展开后相当于 __FILE__ + ":" + __LINE__
参照假设,宏展开结果为/path/test.gs:3
。
__FUN__
__FUN__
宏展开后为当前所在函数的名字。
参照假设,宏展开结果为test_func
。
__SRC_PREFIX__
_SRC_PREFIX__
行展开后相当于 "#pragma location " + __FILE__ + ":" + __LINE__
参照假设,宏展开结果为#pragma location /path/test.gs:3
。
__COUNTER__
__COUNTER__
宏展开后为在此之前的__COUNTER__
的数量。
如下代码:
write(__COUNTER__);
write(__COUNTER__);
展开后为:
write(0);
write(1);
__result__
__result__
严格来说是一个语法糖, 其专用于处于非entry函数的defer中,用于获取当前函数的返回值。
如下代码:
int test_ret()
{
defer {write(__result__)};
reutrn 1;
}