免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 没本

C语言带常量参数宏的编译时参数检查,有办法实现吗?(答案已经公开) [复制链接]

论坛徽章:
0
发表于 2012-02-01 16:39 |显示全部楼层
有点意思,先问问是不是依赖于特定编译器?

论坛徽章:
0
发表于 2012-02-01 16:47 |显示全部楼层
回复 11# ddddddddd


    最好是符合C语言标准,否则的话要求支持大厂商的编译器,如gcc / msvc / clang / armcc

论坛徽章:
0
发表于 2012-02-01 16:53 |显示全部楼层
恩,不知道下面的行不行?利用数组定义方括号中不能小于等于0
int arr1[A];
int arr2[50-A];

论坛徽章:
0
发表于 2012-02-01 16:55 |显示全部楼层
恩,似乎可以省点事
int arr[A*(50-A)];

论坛徽章:
0
发表于 2012-02-01 16:56 |显示全部楼层
回复 13# ddddddddd


    办法理论上可行。不过你的方法有运行时的内存开销,这个是需要避免的。

论坛徽章:
0
发表于 2012-02-01 16:59 |显示全部楼层
另外这种方法不能检查A被程序员填为了变量的情况,如果是变量的话,符合C99的标准,不会报错

论坛徽章:
0
发表于 2012-02-01 17:01 |显示全部楼层
没本 发表于 2012-02-01 16:59
另外这种方法不能检查A被程序员填为了变量的情况,如果是变量的话,符合C99的标准,不会报错

你在顶楼说:“其中参数A使用时必为常量,且在0..50范围内。”,至于内存开销,自会优化掉的。

论坛徽章:
0
发表于 2012-02-01 17:05 |显示全部楼层
处理常量变量问题也好办
static int v=A;

论坛徽章:
1
丑牛
日期:2013-09-29 19:04:50
发表于 2012-02-01 17:11 |显示全部楼层
试了一下, #if和#error 好像不能加到宏函数定义里面 ?

论坛徽章:
0
发表于 2012-02-01 17:25 |显示全部楼层
公布答案了,看来知道static_assert的人还不多啊。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP