相关疑难解决方法(0)

什么是外部联系和内部联系?

我想了解外部联系和内部联系及其区别.

我也想知道的意思

const默认情况下,变量内部链接,除非另有声明extern.

c++ c++-faq

318
推荐指数
8
解决办法
12万
查看次数

弃用静态关键字...不再?

在C++中,可以static在翻译单元中使用关键字来影响符号的可见性(变量或函数声明).

在n3092,这被弃用了:

附件D.2 [depr.static]
在命名空间范围内声明对象时,不推荐使用static关键字(见3.3.6).

在n3225中,这已被删除.

我能找到的唯一一篇文章有些不正式.

它确实强调,为了与C兼容(以及将C程序编译为C++的能力),弃用令人讨厌.但是,直接将C程序编译为C++本身就是一种令人沮丧的经历,所以我不确定它是否值得考虑.

有谁知道为什么它被改变了?

c++ standards static c++11

84
推荐指数
3
解决办法
2万
查看次数

全局变量实现

当我写下面的程序时:

档案1:

#include <stdio.h>    
int global;    
void print_global1() {
        printf("%p\n", &global);
}
Run Code Online (Sandbox Code Playgroud)

档案2:

#include <stdio.h>
char global;    
void print_global2() {
        printf("%p\n", &global);
}
Run Code Online (Sandbox Code Playgroud)

档案3:

void print_global1();
void print_global2();
int main()
{
        print_global1();
        print_global2();

        return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

$ ./a.out
0x804a01c
0x804a01c
Run Code Online (Sandbox Code Playgroud)

这是我的问题:

  • 为什么链接器将"int global"和"char global"实现为相同的全局变量:
  • 为什么编译器不会抱怨(不是最小的警告-Wall -Wextra -ansi......)
  • 如何管理全局变量的大小(int和char的大小不同)

PS:第二个问题是架构/编译器相关,所以让我们把gcc或Visual C++(对于C)的int大小为32位

编辑:这不是C++的问题,但对于C!

我使用gcc版本4.4.1和Ubuntu 9.10,这是编译控制台输出:

$ ls
global_data1.c  global_data2.c  global_data.c

$ gcc -Wall -Wextra -ansi global_data*.c
$ ./a.out
0x804a01c
0x804a01c
or 
$ gcc -Wall -Wextra -ansi -c global_data*.c
$ …
Run Code Online (Sandbox Code Playgroud)

c compiler-construction variables global-variables

17
推荐指数
2
解决办法
4378
查看次数