免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: Xorcerer
打印 上一主题 下一主题

[C] C语言,const定义了,gcc却报告没有定义。 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2008-10-30 08:38 |只看该作者
在头文件中定义变量是不可取的。
C中用const修饰变量,则该变量只不过是只读变量而已,在不支持C99变长数组标准的编译器上是不能作为数组下标的。要区分一下C中的const与C++中的const。

从语法角度,你贴出来的代码是可以编译通过的。我不知道你为什么会产生错误。

论坛徽章:
0
12 [报告]
发表于 2008-10-30 09:24 |只看该作者
在我的电脑上是可以编译通过的
$gcc --version
gcc (SUSE Linux) 4.3.1 20080507 (prerelease) [gcc-4_3-branch revision 135036]
Copyright (C) 2008 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
甚至用ansi选项(c89标准)gcc -ansi const.c都可以编译通过。

论坛徽章:
0
13 [报告]
发表于 2008-10-30 11:11 |只看该作者
原帖由 gawk 于 2008-10-30 08:36 发表

我觉得应该不会报错啊,include应该也是预处理后拷贝而已
应该看看你的头文件中完整版


其实,那已经是完整版了。
就一变量声明。

我原来的想法跟你一样,觉得就是两个文件拼在一起。
现在觉得貌似不是这样。

论坛徽章:
0
14 [报告]
发表于 2008-10-30 11:23 |只看该作者
原帖由 blizzard213 于 2008-10-30 00:40 发表

见4 5楼
你只需include即可
但必须在某c处定义一次


感谢以上各位的热心。

我修改了一下,const.h 以下已经是完整代码了。
extern const long BUF_LEN = 100;


main.c注释掉了

  1. //extern const long BUF_LEN;
复制代码


编译结果。可以通过和运行,只是有warning,我想知道原因。

  1. In file included from main.c:1:
  2. const.h:2: warning: `BUF_LEN' initialized and declared `extern'
复制代码


gcc版本

  1. $gcc --version
  2. gcc (GCC) 3.4.6 (Gentoo Hardened 3.4.6-r2 p1.5, ssp-3.4.6-1.0, pie-8.7.10)
  3. Copyright (C) 2006 Free Software Foundation, Inc.
  4. This is free software; see the source for copying conditions.  There is NO
  5. warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
复制代码

论坛徽章:
0
15 [报告]
发表于 2008-10-30 11:55 |只看该作者
原帖由 Xorcerer 于 2008-10-30 11:23 发表


感谢以上各位的热心。

我修改了一下,const.h 以下已经是完整代码了。
extern const long BUF_LEN = 100;

main.c注释掉了

//extern const long BUF_LEN;


编译结果。可以通过和运行,只是有w ...

你没看懂
还是那句话
尽量不要定义在h里
同学 声明 和 定义的 区别 你得理解才行啊。。

论坛徽章:
0
16 [报告]
发表于 2008-10-30 12:10 |只看该作者
原帖由 blizzard213 于 2008-10-30 11:55 发表

你没看懂
还是那句话
尽量不要定义在h里
同学 声明 和 定义的 区别 你得理解才行啊。。


你的意思是,只声明它的存在。而不定义它的值?

如果是这样的话,每次include之后,都要重新定义一次它的值,是这样吗?

这样不是不能重用了?

我想一次定义多次可用。就比如那些定义了一堆常量的头文件。

如果涉及到无关技术,却跟逻辑或者编程思想有关的问题,也请不吝赐教。

论坛徽章:
3
戌狗
日期:2014-09-10 17:07:162015年辞旧岁徽章
日期:2015-03-03 16:54:15wusuopu
日期:2016-06-17 17:43:45
17 [报告]
发表于 2008-10-30 12:59 |只看该作者
原帖由 Xorcerer 于 2008-10-30 12:10 发表


你的意思是,只声明它的存在。而不定义它的值?

如果是这样的话,每次include之后,都要重新定义一次它的值,是这样吗?

这样不是不能重用了?

我想一次定义多次可用。就比如那些定义了一堆常量的 ...

先不说用常量去定义数组好不好。定义常量是这样

1 头文件

  1. extern const long BUF_LEN;
复制代码


2 c文件

  1. const long BUF_LEN = 20;
复制代码

论坛徽章:
0
18 [报告]
发表于 2008-10-30 13:06 |只看该作者
原帖由 Xorcerer 于 2008-10-30 12:10 发表


你的意思是,只声明它的存在。而不定义它的值?

如果是这样的话,每次include之后,都要重新定义一次它的值,是这样吗?

这样不是不能重用了?

我想一次定义多次可用。就比如那些定义了一堆常量的 ...

那你还是用#define算了吧
相信你看到的那些 也 是 用的#define

论坛徽章:
0
19 [报告]
发表于 2008-10-30 16:30 |只看该作者

回复 #11 zszjxh 的帖子

同意。
但楼主的代码在我机子上是没什么问题的。

论坛徽章:
0
20 [报告]
发表于 2008-10-30 23:52 |只看该作者
原帖由 ynchnluiti 于 2008-10-30 12:59 发表

先不说用常量去定义数组好不好。定义常量是这样

1 头文件

extern const long BUF_LEN;


2 c文件

const long BUF_LEN = 20;


好的,我明白你的意思了,那么我先知道“用常量去定义数组”的缺点是?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP