关于C语言宏定义,这样为啥不行
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于C语言宏定义,这样为啥不行相关的知识,希望对你有一定的参考价值。
如题,头文件的一部分:
#include <math.h>
#define HASHSIZE_Y (MAX_VTX_NUM <= 200) ? ((MAX_VTX_NUM <= 100 ) ? 41 : 67) \
: ((MAX_VTX_NUM <= 800) ? ((MAX_VTX_NUM <= 400) ? 101 : 167): ((MAX_VTX_NUM <= 1600) ? 269:347))(程序中占两行)
#define HASHSIZE_X (int)ceil(MAX_VTX_NUM / HASHSIZE_Y)
报错
改成这样:
#include <math.h>
#define HASHSIZE_Y 41
#define HASHSIZE_X 6
正确运行
改成这样
#include <math.h>
#define HASHSIZE_Y (MAX_VTX_NUM <= 200) ? ((MAX_VTX_NUM <= 100 ) ? 41 : 67) \
: ((MAX_VTX_NUM <= 800) ? ((MAX_VTX_NUM <= 400) ? 101 : 167): ((MAX_VTX_NUM <= 1600) ? 269:347))(程序中占两行)
#define HASHSIZE_X 6
不报错
但程序运行这一步时好像无限循环:
for (y=0;y<HASHSIZE_Y;y++)
hashArray[x][y]=NULL;
但是printf(“%d”,HASHSIZE_Y);值正确
后面的表达式都是>0,所以无线循环。
可以在HASHSIZE_Y的外面再套一个()。追问
是的,这个我自己也搞明白了。程序已经调通,没用这么冗长的宏定义。
只是在想问下:像#define HASHSIZE_X (int)ceil(MAX_VTX_NUM / HASHSIZE_Y)
中ceil之类的库函数是不是不能在这里用?向下或向上取整有什么代替的办法?
库函数可以用。
参考技术A 你在反人类吗?三目运算符套这么多,谁看都晕宏定义这么用严重影响程序的大小和执行效率,你搞懂了也没有意义。
以上是关于关于C语言宏定义,这样为啥不行的主要内容,如果未能解决你的问题,请参考以下文章