小编Vor*_*rac的帖子

什么是C中的复合类型?

§6.2.7.5(第66页):

示例给定以下两个文件范围声明:

int f(int (*)(), double (*)[3]);  
int f(int (*)(char *), double (*)[]);  
Run Code Online (Sandbox Code Playgroud)

由此产生的函数的复合类型是:

int f(int (*)(char *), double (*)[3]);
Run Code Online (Sandbox Code Playgroud)

在示例上方,他们解释了复合类型是一种类型,与两种不同类型兼容.我会直观地将"复合类型"这个短语理解为"结构和联合",这似乎是偏离目标的.

什么是C中的复合类型,它用于什么?有人可以详细解释上面的例子吗?

c language-lawyer c11

11
推荐指数
2
解决办法
1455
查看次数

为什么C文件以/*[]*/结尾?

我正在浏览一些专有的源代码:使用库的示例程序.

代码用C和C++编写,使用make for build system.

每个文件都以注释掉的结尾[]:/*[]*/源文件和#[]#makefile.这可能是什么原因?

该代码是使用GCC为ARM编译的,使用扩展.

c coding-style

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

如何使用cv :: remap与前向网格而不是反向网格来扭曲图像?

我有一个11 x 11顶点的网格.这个想法是每个点(顶点)保持扭曲图像中该像素的标准化浮点位置.例如,如果我想拉伸左上边缘,我会写入第一个顶点(-0.1,-0.1).

我有网格,但没有图像变形功能.cv :: remap正是这样......但是以相反的顺序 - 网格"说"哪个像素邻域要映射到输出上的常规网格.

OpenCV中是否有标准的方法来处理反向扭曲?我可以轻松转换网格或使用其他功能吗?我正在使用OpenCV和Boost,但是这样做的任何免费库/工具都适用于我.

PS:我需要在linux上运行这个.

opencv image-processing

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

NULL函数指针

调用null函数指针的行为是什么?

void (*pFunc)(void) = NULL;  
pFunc();
Run Code Online (Sandbox Code Playgroud)

为什么将未使用的函数指针初始化为NULL是可取的?

c c++ c99

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

如何静态地对一组结构进行初始化?

struct A{
    int a; int b;
};
static const struct A a = {.a1 = 1, .a2 = 42};

struct B{
    struct A[666][510]
};
static const struct B b;
Run Code Online (Sandbox Code Playgroud)

我想b用a的副本初始化.但是,我不能碰static const的东西memcpy().我需要b做到static const这一点,因为这样它就会被闪存而不是内存.

我该如何做这项工作.我认为编译器正在arm-none-eabi-gcc使用-std=c89.

c struct

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

使用'typedef'确保逻辑类型安全

typedef int A;
typedef int B;

void foo(A arg){}

void main(void){
    B wrongvar = 7;
    foo(wrongvar);
}
Run Code Online (Sandbox Code Playgroud)

根据标准,这种结构是否应该返回警告/错误?那些最受欢迎的编译器呢?

示例:我们有变量,代表公斤和米,所有都是'int'类型.我们有一个功能,加工米.我们希望编译器能够捕获错误,这些错误与将千克意味着变量变量传递给该函数有关.

我相信Ada能顺利处理.现代C怎么样?

c c99 avr-gcc

8
推荐指数
1
解决办法
1120
查看次数

如何处理条件初始化,这是一个好习惯吗?

我试图在几种可能的做法之间做出决定.比方说,我的函数有许多if()块,它们处理数据,这对它们来说是唯一的.

  • 我应该声明并初始化块内的本地(用于块)数据吗?这是否具有运行时性能成本(由于堆栈中的运行时分配)?

  • 或者我应该在函数入口处声明和/或初始化所有变量,以便在一个可能更快的操作块中完成?

  • 或者我应该在不同的函数中分隔if()块,即使它们只有几行并且在程序中只使用了一行?

或者我是否正在寻找另一个更清洁的选择?这个问题是否能够以当前的一般形式回答?

c performance coding-style

8
推荐指数
1
解决办法
331
查看次数

const lambda是什么意思?

#include <iostream>
int foo(int i)
{
    const auto a = [&i](){ i = 7; return i * i; };
    a();
    return i;
}
int main()
{
    std::cout << foo(42) << std::endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这个compiles(g++ -std=c++11 -Wall -Wextra -Wpedantic main.cpp)并返回7.这对我来说是令人惊讶的,因为通过声明a是一个常量对象,我本来希望i被引用为const int&.显然不是,为什么?

c++ lambda const c++11

8
推荐指数
3
解决办法
7318
查看次数

功能定义由GHCi中的特殊情况

从Haskell 教程:

我们可以根据情况编写整数函数.

-- Compute the sum of the integers from 1 to n.
sumtorial :: Integer -> Integer
sumtorial 0 = 0
sumtorial n = n + sumtorial (n-1)
Run Code Online (Sandbox Code Playgroud)

但是,这是我尝试时会发生的事情:

$ ghci
GHCi, version 8.0.1: http://www.haskell.org/ghc/  :? for help
Prelude> foo 0 = print 999
Prelude> foo n = print n
Prelude> foo 0
0
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

haskell ghci

8
推荐指数
2
解决办法
222
查看次数

是否仍然建议将仿函数传递给STL而不是函数?

在Effective STL中,Scott Meyers在2001年提出建议:

第46项:考虑函数对象而不是函数作为算法参数

在上面的章节中,他继续解释inline operator()可以内联到算法的主体,但通过函数通常不能.这是因为我们实际上传递了一个函数指针.

为了支持这一点,我似乎记得,如果一个函数的地址被采用,该函数不能内联.

所以这里有两个问题.首先,C++ 14仍然如此吗?

如是:

  • 为什么没有自动执行此操作的机制(动机:声明一个仿函数比声明一个函数要简单易懂和可读).
  • 没有捕获的lambda可以转换为函数指针,而捕获lambda只能作为仿函数传递.这是否意味着我们只需要为了所述的优化而捕获某些东西?

c++ stl

7
推荐指数
2
解决办法
251
查看次数