c语言宏定义问题

我想根据定义的宏的值的大小,来确定编译时的程序代码,不知可不可以。比如#defineNUM_OF_BUF8和#defineNUM_OF_BUF16两种情况下,程序的代码是... 我想根据定义的宏的值的大小,来确定编译时的程序代码,不知可不可以。
比如
#define NUM_OF_BUF 8

#define NUM_OF_BUF 16
两种情况下,程序的代码是不一样的。
能不能根据宏定义值(而不是判断某个变量是否定义),来选择分支吗?
我是想知道能不能不用ifdef判断某个宏是否定义,来决定编译的代码。能不能直接通过某个NUM_OF_BUF的值,通过某种方式实现。
现在写一个程序,对缓冲区的大小不同,使用的标志测试方法也不一样。所以想能不能在预编译的时候通过检查NUM_OF_BUF的值,来决定编译的实际代码。
就是想实现一个设置大小的缓冲区,因为大小不同的话,调度方案不同,想在编译时设置。
不想做成全局变量,是因为缓冲区的操作很频繁,每次通过检查全局变量来决定调度策略,效率满足不了需求。
展开
 我来答
甘慈心0hg
2009-04-11 · TA获得超过541个赞
知道小有建树答主
回答量:319
采纳率:0%
帮助的人:384万
展开全部
一般只能根据某个宏是否被定义,来确定编译时的代码,例如:
#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 宏定义的值来选择分支。
南极胖熊
2009-04-11 · TA获得超过407个赞
知道小有建树答主
回答量:871
采纳率:0%
帮助的人:480万
展开全部
你这种宏和全局变量有啥分别。。。
你编译了代码当然不一 样了。。。
PUSH的数字不一样。。。。就这么简单。。。

你如果要改变编译时候的代码
最简单的是用编译器里的设置

设定下初始加载位置啥的还差不多。。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友7996d88
2009-04-11 · TA获得超过372个赞
知道小有建树答主
回答量:254
采纳率:0%
帮助的人:248万
展开全部
可以用
#ifdef ***
#define ***
#else
#define ***
#endif
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
康桥之后
2009-04-11 · TA获得超过143个赞
知道小有建树答主
回答量:351
采纳率:0%
帮助的人:146万
展开全部
你可以在http://c.youku.com/iku下载一个i酷软件然后在那里你可以下载一些关于C语言的视频那里的讲解都很清楚的!你试试吧!

参考资料: http://c.youku.com/iku

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
南鱼北鸟
2009-04-11 · TA获得超过694个赞
知道小有建树答主
回答量:463
采纳率:0%
帮助的人:464万
展开全部
条件编译吗?你是要定义二个大小不同的buf数组来决定程序代码的选择?不是很明白你的意思。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友e1b9539c0c
2009-04-11 · TA获得超过734个赞
知道大有可为答主
回答量:2241
采纳率:33%
帮助的人:804万
展开全部
宏定义为常量
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式