标签: storage-class-specifier

关于C++中auto关键字的困惑

我对以下代码感到困惑:

#include <iostream>
using namespace std;

int *foo()
{
   //Operation
}

int main ()
{
        auto int ret = foo();
}
Run Code Online (Sandbox Code Playgroud)

我在GCC下编译了上面的代码,但是我收到了以下错误:

error: two or more data types in declaration of 'ret'
         auto int ret = foo();
Run Code Online (Sandbox Code Playgroud)

但是,如果我删除int类型,如下:

auto ret = foo();
Run Code Online (Sandbox Code Playgroud)

然后它成功运行.

auto是一个存储类,int是一种数据类型,那么为什么我在第一种情况下得到"两种或更多数据类型"的错误?

c++ storage-class-specifier auto c++11 c++14

24
推荐指数
3
解决办法
3836
查看次数

"文件范围"和"程序范围"之间有什么区别

全局声明的变量被称为具有程序范围
使用static关键字全局声明的变量据说具有文件范围.

例如:

int x = 0;             // **program scope**   
static int y = 0;      // **file scope**  
static float z = 0.0;  // **file scope** 

int main()  
{  
   int i;   /* block scope */  
   /* .
      .
      .
   */ 
   return 0;  
}  
Run Code Online (Sandbox Code Playgroud)

这两者有什么区别?

c scope storage-class-specifier

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

变量可以声明为static还是extern?

为什么以下不编译?

...
extern int i;
static int i;
...
Run Code Online (Sandbox Code Playgroud)

但如果你颠倒了订单,那就很好.

...
static int i;
extern int i;
...
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?

c c++ linkage storage-class-specifier

21
推荐指数
2
解决办法
8316
查看次数

声明中的哪个位置可以放置存储类说明符?

例如,让我们考虑一下static存储类说明符.以下是此存储类说明符的有效和不正确用法的几个示例:

static int a;        // valid
int static b;        // valid

static int* c;       // valid
int static* d;       // valid
int* static e;       // ill-formed

static int const* f; // valid
int static const* g; // valid
int const static* h; // valid
int const* static i; // ill-formed

typedef int* pointer;
static pointer j;    // valid
pointer static k;    // valid
Run Code Online (Sandbox Code Playgroud)

(标记为"有效"的声明被Visual C++ 2012,g ++ 4.7.2和Clang ++ 3.1接受.标记为"格式错误"的声明被所有这些编译器拒绝.)

这看起来很奇怪,因为存储类说明符适用于声明的变量.它是声明的变量,而static不是声明的变量的类型.为什么ei形象k …

c++ declaration storage-class-specifier

19
推荐指数
2
解决办法
3009
查看次数

我们可以在声明中的任何位置放置"typedef"说明符吗?

typedef说明符的语法:

typedef <existing_name> <alias_name>
Run Code Online (Sandbox Code Playgroud)

例如:

typedef long unsigned int Int;
Run Code Online (Sandbox Code Playgroud)

它工作正常.

但是,如果我typedef在宣言中的任何地方放置,像这样:

long unsigned typedef int Int;
Run Code Online (Sandbox Code Playgroud)

然后,它也工作正常.

为什么?我们typedef可以在宣言中放置任何地方吗?

c c++ typedef language-lawyer storage-class-specifier

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

为什么可变的说明符被分类为存储类说明符,而不是限定符?

当说明mutable符用于非静态数据成员的声明时,无论对象的其余部分是否被视为const,数据都是可变的.有了这个事实,我们可能很容易产生这样的印象:mutable说明符与限定符是同一类const,事实证明这不是真的.实际上,该语言将mutable说明符分类为存储类说明符.这非常违反直觉,因为mutable它没有指定存储持续时间.

这个设计决定背后的理由是什么?

什么会使它不像它似乎mutable是一个限定符?

使其成为存储类说明符有什么好处?

c++ language-design mutable language-lawyer storage-class-specifier

15
推荐指数
1
解决办法
406
查看次数

'auto'关键字可以用作C++ 11中的存储类说明符吗?

可在auto关键字被用作在C++ 11中的存储类说明?

以下代码在C++ 11中是否合法?

int main() {
   auto int x;
}
Run Code Online (Sandbox Code Playgroud)

c++ variable-declaration storage-class-specifier c++11

10
推荐指数
1
解决办法
721
查看次数

外部有多个文件和可能的双重定义

我正在运行以下代码编译为: gcc A.c B.c -o combined

计划A:

#include<stdio.h>
int a=1;
int b;
int main()
{
extern int a,b;
fun();
printf("%d %d\n",a,b);
}
Run Code Online (Sandbox Code Playgroud)

方案B:

int a;
int b=2;
int fun()
{
printf("%d %d\n",a,b); 
return 0;
}
Run Code Online (Sandbox Code Playgroud)

在运行"组合"程序时,输出为:

1 2
1 2
Run Code Online (Sandbox Code Playgroud)

现在,我对这个问题有些疑惑:

  1. 为什么不输出:

    0 2

    1 0

  2. 是不是a和b定义了两次?

请清楚地解释一下,我在了解外部时遇到了很多问题,而且很少有这些疑虑不时出现.

提前致谢.

c extern storage-class-specifier output

10
推荐指数
2
解决办法
2883
查看次数

什么是纯变量?

我惊讶地发现这段代码编译:

pure string Foo = SomePureFunction(123);
Run Code Online (Sandbox Code Playgroud)

pure仅在在线文档中的功能上下文中提及.

什么是pure变量,以及他们如何从不同的immutableconst的呢?

d keyword storage-class-specifier

9
推荐指数
1
解决办法
222
查看次数

当我们以相同的代价获得全局变量时,静态局部变量的用途是什么?

在C中,当外部变量以相同的成本服务于其目的时,静态存储类的用途是什么.两者都占用了可执行文件数据段中的存储空间.

我有更好的外部变量范围.如果我希望外部变量的范围是特定文件我不要声明这个变量else where.i看到很多灵活性与全局变量静态局部变量

如果我们有变量的地址,我们可以引用函数外部的局部静态变量.本地静态变量的存储将在数据段中不在函数的堆栈框架中.所以静态存储类带来的独特特性表.

我只是想知道静态是否有任何我不知道的微妙目的.

c static extern storage-class-specifier

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