标签: function-declaration

这行是否声明了一个函数?C++

我读litb提问关于SFINAE 在这里,我想知道到底是什么他的代码声明.下面是一个更简单的(没有模板)示例:

int (&a())[2];
Run Code Online (Sandbox Code Playgroud)

究竟是什么声明?&的作用是什么?为了增加我的困惑,如果我宣布以下内容

int b()[2];
Run Code Online (Sandbox Code Playgroud)

我收到一个关于声明一个返回数组的函数的错误,而第一行没有这样的错误(因此,人们会认为第一个声明不是函数).但是,如果我尝试分配一个

a = a;
Run Code Online (Sandbox Code Playgroud)

我得到一个错误,说我正在尝试分配函数...所以现在它一个函数.究竟是什么东西?

c++ function-declaration

4
推荐指数
2
解决办法
681
查看次数

为什么在方法定义文件中包含标题?

假设您有一个名为sum.c的源文件,如下所示:

#include "sum.h"

int sum(int x, int y) {
    return x+y;
}
Run Code Online (Sandbox Code Playgroud)

将方法的标题包含在自己的定义文件中有什么意义?你不应该只在调用sum函数的源文件中包含它吗?

c header-files function-declaration

4
推荐指数
3
解决办法
420
查看次数

C++ void函数声明

可能重复:
C++为什么在params中放空?

这两个声明之间有什么区别,哪个更常用?

void function1();
Run Code Online (Sandbox Code Playgroud)

void function2( void );
Run Code Online (Sandbox Code Playgroud)

c++ void function-declaration

4
推荐指数
2
解决办法
4602
查看次数

具有构造函数定义但没有实现它的代码的 C++ 类?

我在单个 .h 文件中有以下类:

class MyClass
{
protected:
   MyClass();
   ~MyClass();

private:
   MyClass(const MyClass&);
   MyClass& operator=(const MyClass&);
};

inline MyClass::MyClass()
{
}

inline MyClass::~MyClass()
{
}
Run Code Online (Sandbox Code Playgroud)

令我感到困惑的是,没有实现MyClass(const MyClass&)复制构造函数和MyClass& operator=(const MyClass&)赋值运算符重载的代码。这个类只有定义,但没有别的。

我在我正在分析的代码中看到了这一点,并且它编译得很好。我是 C++ 新手,在我见过的所有示例中,我都在类中找到了定义,在下面或单独的 .cpp 文件中找到了实现

那么,任何人都可以解释为什么这段代码会编译,为什么只包含函数的声明而不包含它的实现?

谢谢!!

c++ class copy-constructor function-declaration

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

使用 PInvoke 时,为什么要使用 __stdcall?

我一直在使用 PInvoke 让我的 C# 应用程序调用我编写的 C++ 函数。

现在,我到处都听到我需要用__stdcall约定定义那些外部可访问的功能。我的问题是:为什么?

到目前为止,我不小心忽略了这个建议,一切都像魅力一样。当我添加__stdcall到我的函数中时,一切都以相同的方式工作(或者至少看起来如此)。

这篇文章__stdcall是用于Win32位函数,但我是针对x64平台编译的。这是否意味着我不应该使用__stdcall它,还是意味着我错过了其他东西?

并且请在回复时使用简单的英语。;-) 这样的行(引自我链接的文章):

被调用者清理堆栈,因此编译器使可变参数函数 __cdecl。

让我的大脑感觉有风滚草从里面吹过。

c++ pinvoke calling-convention stdcall function-declaration

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

隐式函数声明和链接

最近我学会了C中的隐式函数声明.主要观点很明确,但我对在这种情况下理解链接过程有些麻烦.

请考虑以下代码(文件ac):

#include <stdio.h>

int main() {
    double someValue = f();
    printf("%f\n", someValue);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

如果我尝试编译它:

gcc -c a.c -std=c99
Run Code Online (Sandbox Code Playgroud)

我看到关于隐式声明功能的警告f().

如果我尝试编译和链接:

gcc a.c -std=c99
Run Code Online (Sandbox Code Playgroud)

我有一个未定义的引用错误.一切都很好.

然后我添加另一个文件(文件bc):

double f(double x) {
    return x;
}
Run Code Online (Sandbox Code Playgroud)

并调用下一个命令:

gcc a.c b.c -std=c99
Run Code Online (Sandbox Code Playgroud)

令人惊讶的是,一切都成功连接 当然在./a.out调用后我看到了垃圾输出.

所以,我的问题是:如何将隐式声明函数的程序链接起来?在编译器/链接器的引擎下我的例子会发生什么?

我读了那么像一些专题的这个,这个这个,但还是有问题.

c linkage function-declaration implicit-declaration

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

这个宏在函数声明中的作用是什么?

我已下载了一些库,它按以下方式声明了这些函数:

#if !defined(__ANSI_PROTO)
#if defined(_WIN32) || defined(__STDC__) || defined(__cplusplus)
#  define __ANSI_PROTO(x)       x
#else
#  define __ANSI_PROTO(x)       ()
#endif
#endif

int httpdAddVariable __ANSI_PROTO((httpd*,char*, char*));
Run Code Online (Sandbox Code Playgroud)

__ANSI_PROTO这里有什么作用?为什么最好简单地声明为

int httpdAddVariable (httpd*,char*, char*);
Run Code Online (Sandbox Code Playgroud)

c function-declaration

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

在C中声明函数内部的函数

我在网上考试中发现了这个问题.这是代码:

#include <stdio.h>

int main(void) {
    int demo();
    demo();
    (*demo)();
    return 0;
}

int demo(){
    printf("Morning");
}
Run Code Online (Sandbox Code Playgroud)

我在测试后看到了答案.这就是答案:

MorningMorning
Run Code Online (Sandbox Code Playgroud)

我看了解释,但不明白为什么这就是答案.我的意思是,这条线不应该int demo();引起任何"问题"吗?

任何解释都有帮助.谢谢.

c function-pointers function function-declaration

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

如何确定函数是否已被`lambda`或`def`声明?

如果我声明两个函数,a并且b:

def a(x):
    return x**2

b = lambda x: x**2
Run Code Online (Sandbox Code Playgroud)

我无法type区分它们,因为它们都属于同一类型.

assert type(a) == type(b)
Run Code Online (Sandbox Code Playgroud)

另外,types.LambdaType没有帮助:

>>> import types
>>> isinstance(a, types.LambdaType)
True
>>> isinstance(b, types.LambdaType)
True
Run Code Online (Sandbox Code Playgroud)

人们可以使用__name__如下:

def is_lambda_function(function):
    return function.__name__ == "<lambda>"

>>> is_lambda_function(a)
False
>>> is_lambda_function(b)
True
Run Code Online (Sandbox Code Playgroud)

但是,由于__name__可能已被修改,is_lambda_function因此无法保证返回正确的结果:

>>> a.__name__ = '<lambda>'
>>> is_lambda_function(a)
True
Run Code Online (Sandbox Code Playgroud)

有没有一种方法可以产生比__name__属性更可靠的结果?

python lambda types function function-declaration

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

Haskell 中的 const 函数声明

我对该const功能的一个特定示例感到困惑。因此类型声明声明const :: a -> b->a该函数接受两个类型为aand 的参数b并返回一个类型a。例如:

const 5 3 => 5
const 1 2 => 1
Run Code Online (Sandbox Code Playgroud)

根据声明,这是有道理的。但是,我遇到了这个特定的例子:

const (1+) 5 3 => 4
Run Code Online (Sandbox Code Playgroud)

这让我质疑我对函数声明的理解。我知道这个函数只需要两个参数,因为我试过:

const 1 5 3 
Run Code Online (Sandbox Code Playgroud)

现在这让我放心,它只需要 2 个参数。那么这是如何工作的呢?是(1+)不是参数?如果不是,那是什么?

const (1+) 5 3 => 4
Run Code Online (Sandbox Code Playgroud)

haskell function-declaration haskell-prelude

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