#define N 4
#define EXPON(x) x * x * x
#define HALF(x) x * 0.5
int main(){
int i = N + 6;
int j = HALF(i);
int k = EXPON(j + 0);
printf("%d %d %d\n",i, j, k);
}
j
的回报在某种程度上不等于(j+0)
的总和,有人可以解释一下吗?
答案 0 :(得分:8)
你实际上并没有调用函数,而是使用类似函数的宏。宏执行文本替换,因此在扩展之后:
call SQLJ.INSTALL_JAR('C:\path_to_libraries\commons-lang3-3.4.jar', 'APP.commons_lang', 0);
call SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY('derby.database.classpath', 'APP.commons_lang');
create function replace (sourceString varchar(8000), searchString varchar(8000), replaceString varchar(8000))
returns varchar(8000)
parameter style java no sql
language java external name 'org.apache.commons.lang3.StringUtils.replace';
select
replace('bruce bogtrotter', 'bruce', 'john')
from SYSIBM.SYSDUMMY1
成为这个:
int k = EXPON(j + 0);
其中(由于运算符优先级)与此相同:
int k = j + 0 * j + 0 * j + 0;
这不是你想要的。
在定义类似函数的宏时,您应该始终将参数和括起来生成表达式:
int k = j + (0 * j) + (0 * j) + 0;
所以现在你会得到你所期望的:
#define EXPON(x) ((x) * (x) * (x))