相关疑难解决方法(0)

混合extern和const

我可以将extern和const混合为extern const吗?如果是,const限定符是否仅在其声明的范围内强加它的统治,或者它是否应与它声明的转换单元的声明完全匹配?即extern const int i;即使实际的i不是const,反之亦然,我可以声明说吗?

c c++ scope const extern

56
推荐指数
3
解决办法
5万
查看次数

C - 通过const声明访问非const

是否const通过constC标准允许的声明访问非对象?例如,以下代码保证在符合标准的平台上编译和输出23和42?

翻译单位A:

int a = 23;
void foo(void) { a = 42; }    
Run Code Online (Sandbox Code Playgroud)

翻译单位B:

#include <stdio.h>

extern volatile const int a;
void foo(void);

int main(void) {
    printf("%i\n", a);
    foo();
    printf("%i\n", a);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在ISO/IEC 9899:1999中,我刚刚发现(6.7.3,第5段):

如果尝试通过使用具有非const限定类型的左值来修改使用const限定类型定义的对象,则行为是未定义的.

但在上面的例子中,对象没有定义为const(但只是声明).

UPDATE

我终于在ISO/IEC 9899:1999中找到了它.

6.2.7,2

引用同一对象或函数的所有声明都应具有兼容类型; 否则,行为未定义.

6.7.3,9

要使两种合格类型兼容,两者都应具有相同类型的兼容类型; [...]

所以,它未定义的行为.

c const extern

6
推荐指数
1
解决办法
460
查看次数

嵌入式C:全局变量管理器

我想将全局变量封装在一个"数据管理器模块"中.访问只能通过函数来​​避免所有丑陋的全局变量问题......因此内容完全对用户隐藏.有没有现有的概念?这样的实现怎么样?如何将值存储在"数据管理器模块"中?

c embedded

0
推荐指数
1
解决办法
214
查看次数

标签 统计

c ×3

const ×2

extern ×2

c++ ×1

embedded ×1

scope ×1