小编Shw*_*eta的帖子

从函数返回多个值

谁能告诉我如何从函数中返回多个值?
请详细说明一些例子?

c

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

删除文件的最后一行

我想在特定条件下删除文件的最后一行.我使用sed和cut但它们只在输出流上工作,但我想在文件中执行此操作.有人能帮我吗?提前致谢.

linux shell

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

void类型的数组

plain C有很好的功能 - void类型指针,可以用作指向任何数据类型的指针.
但是,假设我有以下结构:


struct token {
    int type;
    void *value;
};
Run Code Online (Sandbox Code Playgroud)

其中value字段可以指向char数组,或指向int或其他内容.
所以在分配这个结构的新实例时,我需要:

1)为这个结构分配内存;
2)为值分配内存并将其分配给值字段.

我的问题是 - 有没有办法声明" 类型为void的数组 ",它可以被转换为任何其他类型,如void指针?

我想要的只是使用"灵活的成员阵列"(在C99标准的6.7.2.1中描述),能够投射到任何类型.

像这样的东西:


struct token {
    int type;
    void value[];
};

struct token *p = malloc(sizeof(struct token) + value_size);
memcpy(p->value, val, value_size);
...
char *ptr = token->value;

Run Code Online (Sandbox Code Playgroud)

我假设将token-> value声明为char或int数组,并且稍后转换为所需类型将执行此工作,但对于稍后将阅读此代码的人来说可能会非常混乱.

c arrays void-pointers

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

比较两个花车

#include <stdbool.h>

bool Equality(double a, double b, double epsilon)
{
  if (fabs(a-b) < epsilon) return true;
  return false;
}
Run Code Online (Sandbox Code Playgroud)

我试过这种方法比较两个双打,但我总是遇到问题,因为我不知道如何选择epsilon,实际上我想比较小数字(小数点后6位数),如0.000001.我尝试了一些数字,有时候我会得到0.000001 != 0.000001,有时0.000001 == 0.000002 除了与epsilon比较之外还有其他方法吗?

我的目的是比较两个双打(代表我的情况下的时间).表示以毫秒为单位的时间的变量t是double.它增加另一个函数0.000001然后0.000002等每次t改变,我想检查它是否等于double tt类型的另一个变量,如果tt == t,我有一些指令要执行..
谢谢你的救命

c comparison

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

传递可变数量的参数

我们可以将可变数量的参数传递给c中的函数吗?

c function variadic variadic-functions

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

如何使一个特定的"无符号与零无意义的比较"警告沉默?

假设我有如下函数:

#define LOWER_BOUND 0
#define UPPER_BOUND 42

int is_value_in_range( some_typedef val)
{
    return ((LOWER_BOUND <= val) && (val <= UPPER_BOUND));
}
Run Code Online (Sandbox Code Playgroud)

假设我已经正确配置了警告,如果some_typedef结果是无符号类型,我会得到一个警告,即无符号类型与0进行无意义的比较.当然这是真的,这是有道理的.

但是,假设我确实希望检查零以在代码中出于一个或多个可能的原因,例如:

  • 虽然边界始终是编译时常量,但它们可能会发生变化(并且宏可能不会"非常"接近函数).例如,可以通过将选项传递给编译器来设置边界.
  • 我可能希望防止以后将typedef更改为signed类型,因为typedef的每次使用都可能在更改时不会被仔细检查.

是否有一种体面,合理的便携方式可以在不完全关闭警告的情况下使警告静音?

如果合理的话,那些依赖于'STATIC_ASSERT()'的功能(可供我使用)是可以接受的.如果类型更改以强制某人查看代码,我可以打破编译.但重要的是要注意,这typeof并非我所针对的所有编译器中都可用的东西.

我特意寻找C语言解决方案,因此模板在这里没有任何用处......

c warnings

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

我可以在没有地图执行任何旋转的情况下预加载STL地图吗?

我已经对来自数据库的数据进行了排序以初始化STL映射.以后只有5%的数据会在地图内更改.

据我了解,每次插入都会产生旋转开销.是否可以绕过排序数据的开销?例如,是否有跳过旋转的选项,另一个STL算法要创建一个带有排序数据的平衡树?

PS:我知道最多只有2次旋转,但是想知道我是否可以进一步提高性能.

c++ stl map

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

函数调用而不是自我消息 - 何时使用什么?

在Objective-C中,当我想调用子例程时,我向对象发送消息,如:

[self mySubroutine:myParameter];

有一个(可忽略的?)性能损失,所以我可以使用C风格的函数调用:

mySubroutine(myParameter);

后者的实现将存在于类的@implementation上下文之外.

这是不是吗?这很常见吗?这是最好的做法吗?

c objective-c subroutine

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

访问boost :: tuple的成员

我正在尝试实现像vector <boost :: tuple <int,int,int >>> day这样的向量; 我想要访问元组的第一个元素来检查一个条件.有人可以告诉我怎么做吗?我是新来的提升.提前致谢.

c++ boost

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

指针位置重置

我有一个指向数组的指针,每次读取数据时都会递增.每个数据都有不同的长度,因此我使用strlen来跳转指针.如何将指针重置回其起始地址?!谢谢您的帮助.

c pointers

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