Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >C和C++中的Const,静态,extern及其组合

C和C++中的Const,静态,extern及其组合
EN

Stack Overflow用户
提问于 2012-10-05 08:32:36
回答 4查看 9.9K关注 0票数 4

( 1)在C和C++中,静态、外部和const是如何使用的,它们的使用有哪些不同?(默认链接和其他差异)

2)允许在C中使用的头文件中包含以下声明和定义,然后将其包含在多个文件中。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
static int testvar = 233;
extern int one;
extern int show();
int abc;
const int xyz;  // const int xyz = 123; produces error

const 定义在编译期间产生错误(可能是由于多个定义造成的)。但是,我可以在头文件中声明是一个const变量,但是由于我们可以定义它提供一个值,而且我们也不能在这个头文件中指定一个值,所以它实际上是无用的。是否有一种方法可以在头文件中定义const,然后通过包含头文件在多个文件中访问它?

3)需要进行哪些更改(如果有的话),以便在C++中的多个文件中包含此标头

4)考虑以下几点

header.h

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
static int z = 23;

test.c

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include"header.h"

z = 33;  //gives error redefinition of z!!!??

void abc()
{
    z = 33;  //perfectly fine here!!??
}

在头文件中定义/声明的静态vars在每个文件中都有内部链接,这意味着每个文件将有该变量的单独副本。那么,为什么将值赋值到任何函数之外的var会导致重新定义错误,而它在函数中是完美的文件呢?

编辑:增加了第四个问题。这很让人困惑。

**PS:现在我只寻找问题1和4的答案。

EN

回答 4

Stack Overflow用户

发布于 2012-10-05 08:36:48

1)

静态意味着不在全局符号表中放置对象。在好的方面,您可以有多个定义的符号,没有问题。另一方面,没有为任何静态变量/方法生成符号,因此它会使调试更加困难。

2及3)

在标题中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
extern const int xyz;

在包含头部的源文件中(理想情况下,名称与.cc匹配的.h相同):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const int xyz = 123;

这样,每个人都知道xyz,但它只在一个源文件中定义。

票数 5
EN

Stack Overflow用户

发布于 2012-10-05 09:25:21

我可以在头文件中声明一个const变量,但是由于我们可以定义它提供一个值,而且我们也不能在这个头文件中指定一个值,所以它实际上是无用的。

如果您想要一个外部链接的符号,您可以在头文件中声明它,然后在您的一个源文件中定义它。你可以选择哪一个。

然而,对于一个const int,通常没有任何意义,它有外部链接。只需将其与头部中的static const int xyz = 123;进行内部链接即可。

这适用于C:在C++中,const默认具有内部链接。

票数 3
EN

Stack Overflow用户

发布于 2012-10-05 09:35:06

(你问了几个问题,所以你得到了部分答案)

回答这个问题

是否有一种方法可以在头文件中定义const,然后通过包含头文件在多个文件中访问它?

可以将const变量的声明(包括值)放在头文件中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
extern const int xyz = 123; // note: extern

然后将定义准确地放在一个源文件中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const int xyz; // note: no value provided

这只适用于c++,而不适用于C(或者更确切地说,我认为它在C中不起作用;但从未检查过)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12750427

复制
相关文章
在Nginx服务器上安装SSL证书
原因是nginx缺少SSL模块,需要重新将SSL模块添加进去,然后再启动nginx:
布禾
2020/10/29
2.1K0
在Nginx服务器上安装SSL证书
20-Nginx配置SSL证书提供HTTPS访问
配置之前需要将证书上传到conf文件夹下的, 然后将上面的名字修改就可以, 我之前买的证书过期了, 就不重新买了~
彼岸舞
2022/09/13
6150
Nginx的SSL证书读取错误问题
在为Nginx配置HTTPS时,有时候会遇到如下错误,但这并非配置Nginx的专有错误输出:
用户1456517
2019/03/05
6K1
Nginx的SSL证书读取错误问题
Nginx配置SSL证书
配置示例 server { listen 443 ssl; server_name wxapi.aimiter.com; root html; index index.html index.htm; ssl_certificate /etc/nginx/conf.d/cert.pem; ssl_certificate_key /etc/nginx/conf.d/cert.key; ssl_session_cache
Spaceack
2020/11/04
3.5K0
Nginx配置SSL证书
前段时间根据老谢写的博文,自己也搞了一个SSL证书,由于虚拟主机权限不够我折腾的,所以就入手了一台新加坡的VPS开始折腾。由于SSL证书是要求独立IP的,所以我这换了IP之后需要向证书机构申请重发证书。当证书重发完成之后,就是绑定证书和修改配置文件了,由于之前的证书是由服务商给安装的,再加上nginx下还没有手动安装过证书,只好去找度娘问了。好歹功夫不负有心人,终于让我捣鼓好了。 [box style=”info”] 服务器环境: VPS类型:OpenVZ(oneasiahost) 操作系统:debi
行 者
2018/03/21
6.7K0
Nginx配置SSL证书
nginx配置SSL证书
然后使用保存配置文件,使用nginx -t命令对文件对配置文件进行校验,如果看到successful表示文件格式证书,这时候我们就可以启动nginx服务或者重新加载nginx配置文件。  启动nginx服务:service nginx start  重新加载配置文件:nginx -s reload
似水的流年
2019/12/05
3.7K0
Nginx配置SSL证书
HTTPS是一种通过计算机网络进行安全通信的传输协议,经由HTTP进行通信,利用SSL/TLS建立全信道,加密数据包。HTTPS使用的主要目的是提供对网站服务器的身份认证,同时保护交换数据的隐私与完整性
码客说
2019/10/22
3.4K0
Nginx服务器上安装SSL证书
若出现“–with-http_ssl_module”说明已经安装过,否则继续执行下列步骤
别团等shy哥发育
2023/02/25
3.2K0
Nginx服务器上安装SSL证书
nginx ssl证书生成_docker ssl证书
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/09/30
6.4K0
nginx自动申请ssl证书
IT不难
2024/07/01
1951
nginx自动申请ssl证书
Nginx同一个IP上多个域名配置安装SSL证书
在同一台服务器上配置多个带有SSL证书的HTTPS网站时,每个网站确实需要使用不同的端口号,以避免冲突。这是因为SSL/TLS协议通常是在特定的端口上运行的,默认情况下是443端口。
Tinywan
2024/03/20
2.3K0
Nginx同一个IP上多个域名配置安装SSL证书
nginx制作和添加ssl证书
ssl证书可以去相关网站申请,例如阿里云有免费的可以使用。本文以openssl制作ssl证书,以作测试使用。
菲宇
2019/06/12
3.3K0
如何为Nginx 配置SSL证书?
用户通过http协议访问网站时,浏览器和服务器之间是明文传输,这就意味着用户填写的密码、帐号、交易记录等机密信息都是明文,随时可能被泄露、窃取、篡改,被黑客加以利用。
用户1560186
2019/11/19
3.9K0
Godaddy ssl证书配置到nginx
执行完以上命令后,当前目录会多出“domain.key”和“domain.csr”文件
庞小明
2019/07/02
4K0
nginx配置ssl证书实现https
SSL证书是数字证书的一种,类似于驾驶证、护照和营业执照的电子副本。因为配置在服务器上,也称为SSL服务器证书。SSL 证书就是遵守 SSL协议,由受信任的数字证书颁发机构CA,在验证服务器身份后颁发,具有服务器身份验证和数据传输加密功能。
后端码匠
2020/08/21
7.6K0
nginx配置ssl证书实现https
Nginx+SSL+Tomcat配置SSL证书(Nginx+SSL做前端,后端使用tomcat)
下面解决方案是浏览器和 Nginx 之间使用 HTTPS 通讯,而 Nginx 到 Tomcat 通过 proxy_pass 使用标准 HTTP 连接。
BUG弄潮儿
2022/06/30
1.8K0
Nginx+SSL+Tomcat配置SSL证书(Nginx+SSL做前端,后端使用tomcat)
服务器上 nginx 一个ssl证书 一个域名 多个端口
先弄一个ssl证书 下载nginx配置证书后 在服务器上 nginx安装目录 下的server配置字段中加入
余生
2019/10/09
7.3K0
腾讯云SSL证书_nginx反向代理配置证书
下载完证书之后解压,因为腾讯云选择的是nginx服务器,所以我们只需要下载nginx并解压。
全栈程序员站长
2022/10/01
6.7K0
腾讯云SSL证书_nginx反向代理配置证书
Nginx如何开启配置多个证书
nginx支持TLS协议的SNI扩展(Server Name Indication,简单地说这个扩展使得在同一个IP上可以以不同的证书serv不同的域名)。不过,SNI扩展还必须有客户端的支持,另外本地的OpenSSL必须支持它。 如果启用了SSL支持,nginx便会自动识别OpenSSL并启用SNI。是否启用SNI支持,是在编译时由当时的 ssl.h 决定的(SSL_CTRL_SET_TLSEXT_HOSTNAME),如果编译时使用的OpenSSL库支持SNI,则目标系统的OpenSSL库只要支持它就可以正常使用SNI了。
云知识Online
2018/05/03
3.5K0
centos安装nginx并配置SSL证书
配置路径:/etc/nginx/ 日志路径:/var/log/nginx 打开配置文件 在HTTP节点下配置两个server节点,其他不变
liulun
2019/09/27
2.5K0

相似问题

nginx ssl通配符证书问题

10

nginx SSL证书过期

20

ssl证书不匹配问题与nginx

10

在nginx上设置SSL cert时,是否需要提供根证书?

20

在Nginx上安装商业通配符SSL证书

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文