
c语言宏定义问题
我想根据定义的宏的值的大小,来确定编译时的程序代码,不知可不可以。比如#defineNUM_OF_BUF8和#defineNUM_OF_BUF16两种情况下,程序的代码是...
我想根据定义的宏的值的大小,来确定编译时的程序代码,不知可不可以。
比如
#define NUM_OF_BUF 8
和
#define NUM_OF_BUF 16
两种情况下,程序的代码是不一样的。
能不能根据宏定义值(而不是判断某个变量是否定义),来选择分支吗?
我是想知道能不能不用ifdef判断某个宏是否定义,来决定编译的代码。能不能直接通过某个NUM_OF_BUF的值,通过某种方式实现。
现在写一个程序,对缓冲区的大小不同,使用的标志测试方法也不一样。所以想能不能在预编译的时候通过检查NUM_OF_BUF的值,来决定编译的实际代码。
就是想实现一个设置大小的缓冲区,因为大小不同的话,调度方案不同,想在编译时设置。
不想做成全局变量,是因为缓冲区的操作很频繁,每次通过检查全局变量来决定调度策略,效率满足不了需求。 展开
比如
#define NUM_OF_BUF 8
和
#define NUM_OF_BUF 16
两种情况下,程序的代码是不一样的。
能不能根据宏定义值(而不是判断某个变量是否定义),来选择分支吗?
我是想知道能不能不用ifdef判断某个宏是否定义,来决定编译的代码。能不能直接通过某个NUM_OF_BUF的值,通过某种方式实现。
现在写一个程序,对缓冲区的大小不同,使用的标志测试方法也不一样。所以想能不能在预编译的时候通过检查NUM_OF_BUF的值,来决定编译的实际代码。
就是想实现一个设置大小的缓冲区,因为大小不同的话,调度方案不同,想在编译时设置。
不想做成全局变量,是因为缓冲区的操作很频繁,每次通过检查全局变量来决定调度策略,效率满足不了需求。 展开
6个回答
展开全部
一般只能根据某个宏是否被定义,来确定编译时的代码,例如:
#include <stdio.h>
#include <assert.h>
#define DEBUG 1 // 这后面不写 1 也可以
#define NUM_OF_BUF 8
#ifdef DEBUG // 如果上面定义过DEBUG,就编译以下4行
int main() {
assert (NUM_OF_BUF==8);
return 0;
}
#else // 如果上面没有定义过DEBUG,就编译以下几行
int main() {
// 编译之后,代码里 NUM_OF_BUF 就代替为上面定义后的值
if (8 == NUM_OF_BUF) {
printf("%d\n",NUM_OF_BUF);
} else if (16 == NUM_OF_BUF) {
printf("NUM_OF_BUF的定义被修改了?\n");
}
return 0;
}
#endif
所以,当你去掉 #define DEBUG 1 之后,这个宏没有被定义,编译出的程序代码就会改变;
也可以根据 NUM_OF_BUF 宏定义的值来选择分支。
#include <stdio.h>
#include <assert.h>
#define DEBUG 1 // 这后面不写 1 也可以
#define NUM_OF_BUF 8
#ifdef DEBUG // 如果上面定义过DEBUG,就编译以下4行
int main() {
assert (NUM_OF_BUF==8);
return 0;
}
#else // 如果上面没有定义过DEBUG,就编译以下几行
int main() {
// 编译之后,代码里 NUM_OF_BUF 就代替为上面定义后的值
if (8 == NUM_OF_BUF) {
printf("%d\n",NUM_OF_BUF);
} else if (16 == NUM_OF_BUF) {
printf("NUM_OF_BUF的定义被修改了?\n");
}
return 0;
}
#endif
所以,当你去掉 #define DEBUG 1 之后,这个宏没有被定义,编译出的程序代码就会改变;
也可以根据 NUM_OF_BUF 宏定义的值来选择分支。
展开全部
你这种宏和全局变量有啥分别。。。
你编译了代码当然不一 样了。。。
PUSH的数字不一样。。。。就这么简单。。。
你如果要改变编译时候的代码
最简单的是用编译器里的设置
设定下初始加载位置啥的还差不多。。。。
你编译了代码当然不一 样了。。。
PUSH的数字不一样。。。。就这么简单。。。
你如果要改变编译时候的代码
最简单的是用编译器里的设置
设定下初始加载位置啥的还差不多。。。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
可以用
#ifdef ***
#define ***
#else
#define ***
#endif
#ifdef ***
#define ***
#else
#define ***
#endif
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你可以在http://c.youku.com/iku下载一个i酷软件然后在那里你可以下载一些关于C语言的视频那里的讲解都很清楚的!你试试吧!
参考资料: http://c.youku.com/iku
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
条件编译吗?你是要定义二个大小不同的buf数组来决定程序代码的选择?不是很明白你的意思。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
宏定义为常量
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询