小编Pan*_*tes的帖子

C宏:显然无用宏的优点/意图

我在C编程方面有一些经验,但我不敢称自己精通.最近,我遇到了以下宏:

#define CONST(x) (x)
Run Code Online (Sandbox Code Playgroud)

我发现它通常用于表达式,例如:

double x, y;
x = CONST(2.0)*y;
Run Code Online (Sandbox Code Playgroud)

完全被这个宏的观点困惑,我广泛研究了宏的优点/缺点和属性,但我仍然无法弄清楚这个宏的用途是什么.我错过了什么吗?

c macros

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

Bash退出状态的简写增量表示法

我注意到bash 表示法的返回状态明显不一致(( )).
考虑以下

$> A=0
$> ((A=A+1))
$> echo $? $A
0 1
Run Code Online (Sandbox Code Playgroud)

但是使用其他众所周知的速记增量表示法产生:

$> A=0
$> ((A++))
$> echo $? $A
1 1
Run Code Online (Sandbox Code Playgroud)

如果set -e脚本中有内置的第二个表示法将导致脚本退出,因为((A++))返回的非零的退出状态.在这个相关问题中或多或少地解决了这个问题.但它似乎并没有解释这两个符号在退出状态的差异((A=A+1))((A++))

((A++))似乎1只有在A等于时返回0.(免责声明:我没有做过详尽的测试.在bash 4.1.2和4.2.25中测试过).所以最后一个问题归结为:

为什么要A=0; ((A++))回来1

bash shorthand exitstatus

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

在配置单元中动态删除分区

我在hive中有两个表,它们都用表示时间戳的String分区(我使用字符串而不是时间戳,因为我使用的是Cloudera Impala中的表,它不支持按时间戳分区的表).

这些表用于在特定时间片中存储大量数据.第一个表包含更高时间粒度的最新数据,比如说1分钟时间片和第二个较低粒度的旧数据,这里说1小时时间片.

所以我有一个查询总结了比1分钟时间片的特定时间更早的数据,这样我就有1小时时间片的数据,并用1小时时间片将其插入到我的表中.

创建1小时时间片后,我想删除新1小时时间片中包含的所有1分钟时间片.并且由于表是由表示时间的字符串分区的,因此我可以删除相应的分区.

并且知道我的实际问题:

是否有可能在蜂巢中以某种方式丢弃分区

 ALTER TABLE oneMinSlices DROP IF EXISTS PARTITION(time < 'YYYY-MM-DD HH:MM:SS')
Run Code Online (Sandbox Code Playgroud)

在此先感谢您的帮助.

ps:如果你想知道为什么我这样做:数据是持续增长的,如果我们不删除1分钟的时间片,那么包含它们的表变得非常大,导致我们的查询变慢并且需要很多空间.

hadoop hive hiveql

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

valgrind 中函数指针的读取大小无效

我遇到了一个相当复杂的应用程序的问题,其中 valgrind 报告与使用函数指针相关的无效读取大小问题。我试图将问题减少到尽可能小的代码。基本上,有一个类A定义了一个model将一些数据作为参数的函数。类B具有函数指针,稍后将其设置为modelA实例的函数。然后函数B->run()调用函数指针。

#include <iostream>
#include <vector>
#include <functional>

using namespace std::placeholders;

class A
{
public:
    A() {};
    ~A(){};

    void model(std::vector<double>*);
};

void A::model(std::vector<double>* data)
{
    for (size_t i = 0; i <= (*data).size(); ++i) {
        std::cout << (*data)[i] << std::endl;
    }

    return;
}

class B
{
public:
    B() {};
    ~B(){};

    void run();
    std::function<void(std::vector<double>*)> f_model;  
};

void B::run()
{
    std::vector<double> data(10, 1);
    f_model(&data);

    return;
}

int main(int argc, …
Run Code Online (Sandbox Code Playgroud)

c++ valgrind function-pointers c++11

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

标签 统计

bash ×1

c ×1

c++ ×1

c++11 ×1

exitstatus ×1

function-pointers ×1

hadoop ×1

hive ×1

hiveql ×1

macros ×1

shorthand ×1

valgrind ×1