标签: declaration

螺旋规则和'声明跟随用法'用于解析C和C++声明

这个问题遵循关于C声明的另一个问题.阅读这个问题的答案,我读到了螺旋规则,我也理解了"声明遵循用法"的含义.

好到目前为止.但后来我读到了这个宣言:

char *(*(*a[N])())(); 
Run Code Online (Sandbox Code Playgroud)

我想知道如何用"声明跟随用法""规则"来解析它.特别是对于阵列部分.

我读到的是:

(*(*a[N])()) 
Run Code Online (Sandbox Code Playgroud)

是一个()返回a 的函数char *,然后解除引用以下内容

(*a[N])() // 1
Run Code Online (Sandbox Code Playgroud)

这是'函数返回char*',所以1是'返回函数的指针char *'然后我会说'何时(*a[N])被调用,它是[先前的声明]'.此时我们有(*a[N])一个返回指向返回函数的指针的函数char *.

但后来我不知道如何应用这个规则来区分"指向数组的指针"和"指针数组".

有人可以澄清一下吗?

其他问题:这些声明中的"优先级"规则是什么,&(在C++中)*,和[]?[也许"优先"不是正确的术语]


为了检查我是否正确理解了'螺旋规则',我也在下面解析这个表达式; 请告诉我,如果我错了.

       +-----------+
       | +------+  |
       | | +-+  |  |
       | | ^ |  |  |
char* (*(* a[N])())(); 
    ^  ^ ^   ^  ^  ^
    |  | |   |  |  |
    |  | +---+ …
Run Code Online (Sandbox Code Playgroud)

c c++ declaration

17
推荐指数
1
解决办法
3638
查看次数

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

模板类指针c ++声明

template <typename T>
class Node
{...};

int main
{
    Node* ptr;
    ptr = new Node<int>;
}
Run Code Online (Sandbox Code Playgroud)

将无法编译我必须将指针声明为

Node<int>* ptr;
Run Code Online (Sandbox Code Playgroud)

为什么在声明指针时我必须指定类型我还没有创建类,为什么编译器必须知道它将指向哪种类型.并且不可能创建一个通用指针,然后决定我想要分配它的类型.

c++ templates pointers class declaration

17
推荐指数
4
解决办法
4万
查看次数

合成错误"缺少属性实现声明的上下文"

有人有主意吗?当我尝试合成我在.h文件中声明的属性时,它不让我合成它.有任何想法吗?谢谢!

xcode properties declaration

17
推荐指数
1
解决办法
9977
查看次数

codeigniter检查库/辅助/核心文件是否已加载的正确方法

我正在使用codeigniter 2.

感谢是否有人能够显示正确的方法来检查以下文件:
- 库文件是否已加载?
- 加载了帮助文件?
- 配置文件已加载?
- 模型文件已加载?
- 加载了third_party文件?

问候

configuration codeigniter declaration

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

如何在ANSI C中的结构中使用枚举?

以下代码必须在main-function中使用,但我不知道它是如何使用的.

struct SomeItem
{
    enum {MOVIE, MUSIC} itemType;
    union {
        struct Movie* movie;
        struct Music* music;
    };
};
Run Code Online (Sandbox Code Playgroud)

这个结构用在带有previous/item/next指针的动态链表中,但我不知道如何设置枚举.或者如何初始化它.

我需要知道它在main函数中的样子.

biglist.someitem = ???;
/* declaration I use */
struct Library* biglist;
Run Code Online (Sandbox Code Playgroud)

更多代码,以了解我想要做什么.

struct Library{
struct SomeItem* someitem;
struct SomeItem* previousItem;
struct SomeItem* nextItem;
};
Run Code Online (Sandbox Code Playgroud)

编译错误:C2037:'someitem'左边指定未定义的struct/union'library'C2065:MOVIE:未声明的标识符

我仍然是ANSI C的新秀,所以不要拍我好;)

c enums struct initialization declaration

16
推荐指数
1
解决办法
4万
查看次数

有没有一个有效的案例来创建一个立即被销毁的临时文件,而不是直接在C++中使用?

灵感来自这个问题.假设我有class Lock一个默认的构造函数,在某些代码中我编写了以下语句:

Lock();
Run Code Online (Sandbox Code Playgroud)

这将产生创建临时对象class Lock并立即销毁它的效果.当然,创作可能会产生一些副作用,这改变程序行为,但这看起来很奇怪.

所以我的第一个猜测是,从语言角度看,这些语句完全有效,很可能包含逻辑错误.

上述声明是否有一些有效的用例?是否有一些众所周知的流行习语包括这些陈述?为什么我要在正确的程序中使用这些语句?

c++ constructor design-patterns declaration

16
推荐指数
2
解决办法
316
查看次数

找出C声明如:double(*b)[n]

我想弄清楚一些C声明.这些C声明的含义是什么?

double (*b)[n];
double (*c[n])();
double (*d())[n];
Run Code Online (Sandbox Code Playgroud)

c declaration

16
推荐指数
2
解决办法
1137
查看次数

在C函数中声明extern变量?

我在C文件中定义了一个变量:int x我知道extern int x如果我想在其他文件中使用它,我应该用它来在其他文件中声明它.

我的问题是:我应该在其他文件中将其声明在哪里?

  1. 在所有功能之外,

    // in file a.c:
    int x;
    
    // in file b.c:
    extern int x;
    void foo() { printf("%d\n", x); }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 在将使用它的功能内?

    // in file b.c:
    void foo() {
       extern int x;
       printf("%d\n", x);
    }
    
    Run Code Online (Sandbox Code Playgroud)

我的怀疑是:

  • 哪一个是正确的?或者
  • 如果两者都正确,哪个是首选?

c declaration extern variable-declaration

16
推荐指数
3
解决办法
8196
查看次数

是`template <typename>;`legal C++?

GCCClangtemplate<typename>;在全球范围内是否是C++中的有效声明存在分歧.

我希望在C++标准中不允许它,因为模板化属于声明语句,而不是表达式语句,因此也不属于null语句(语句;).

那么,这是Clang中的一个错误吗?

c++ grammar templates declaration language-lawyer

16
推荐指数
2
解决办法
915
查看次数