小编Mar*_*ský的帖子

编译器:如果条件总是为真/假,该怎么办?

我想到条件和编译器.我正在编写Arduino的应用程序,所以我需要尽可能快的应用程序.

在我的代码中我有这个:

#define DEBUG false    

...

if (DEBUG)
{
  String pinName;
  pinName = "Pin ";
  pinName += pin;
  pinName += " initialized";
  Serial.println(pinName);
}
Run Code Online (Sandbox Code Playgroud)

我想知道编译器是否在二进制文件中不包含代码(if块中的代码).条件总是错误的,所以程序永远不会去那里.

从另一方面来看.如果DEBUG是真的怎么办?Arduino是否测试条件或编译器只包含if在二进制文件中的主体?

我发现这个网站https://gcc.gnu.org/onlinedocs/gcc-3.0.2/cpp_4.html关于#if指令,所以我可以重写代码以获得这些指令而不是"正常"if.但我想知道我是否应该重写它,或者是否浪费时间.

c c++ gcc if-statement arduino

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

MySQL group by + order by非常慢

我不确定发生了什么,但是我认为MySQL应该可以很好地处理。

我有这样的SQL。

SELECT u.id AS user_id, SUM(t.amount) AS total
FROM user u
INNER JOIN transaction t ON t.user_id = u.id
WHERE u.condition = true
GROUP BY u.id
ORDER BY total DESC;
Run Code Online (Sandbox Code Playgroud)

该查询运行10秒钟。

如果删除ORDER BY子句,则时间约为4秒。

表很大,但是在GROUP BY之后,我只有40行。排序40行真的需要6秒吗?我想说这应该由优化器处理。

但是,如果我这样运行查询:

SELECT *
FROM (
    SELECT u.id AS user_id, SUM(t.amount) AS total
    FROM user u
    INNER JOIN transaction t ON t.user_id = u.id
    WHERE u.condition = true
    GROUP BY u.id
) data
ORDER BY total DESC;
Run Code Online (Sandbox Code Playgroud)

该查询运行4秒钟。我知道我强迫MySQL仅对从内部选择检索的40条记录进行排序。

我真的不明白一件事。MySQL无法在GROUP BY之前按总数排序。那么,什么使查询变慢呢?

在这种情况下,我可以使用第二个查询,但是如果我有另一个内部SQL,MySQL将开始创建临时表,这可能会使性能下降,甚至比ORDER BY还多。另一个“问题”是我使用ORM,而使用原始SQL确实很痛苦。

感谢您的建议。

编辑:

使用ORDER …

mysql sql

5
推荐指数
0
解决办法
149
查看次数

我可以在 Android 中将 android:id 声明为数组吗?

我有这个代码。

rele[0] = new ReleController(findViewById(R.id.button1), 1, this);
rele[1] = new ReleController(findViewById(R.id.button2), 2, this);
rele[2] = new ReleController(findViewById(R.id.button3), 3, this);
rele[3] = new ReleController(findViewById(R.id.button4), 4, this);
Run Code Online (Sandbox Code Playgroud)

我的按钮布局如下所示:

<LinearLayout style="@style/CoreLayout">

    <ImageButton
        android:id="@+id/button1"
        style="@style/Button.Blue"
        android:src="@mipmap/ic_arrow_left" />

    <ImageButton
        android:id="@+id/button2"
        style="@style/Button.Green"
        android:src="@mipmap/ic_arrow_right"/>
</LinearLayout>

<LinearLayout style="@style/CoreLayout">

    <ImageButton
        android:id="@+id/button3"
        style="@style/Button.Yellow"
        android:src="@mipmap/ic_arrow_up"/>

    <ImageButton
        android:id="@+id/button4"
        style="@style/Button.Purple"
        android:src="@mipmap/ic_arrow_down"/>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

我想弄清楚是否有办法做这样的事情:

for(int i = 0; i < 4; i++)
{
  rele[i] = new ReleController(findViewById(R.id.button[i+1]), i+1, this);
}
Run Code Online (Sandbox Code Playgroud)

实际上,我有 8 个按钮,因此为所有按钮编写所有这些行真的很烦人。

我想知道按钮 ID 是否可以像这样声明为数组:

android:id="@+id/button[1]"
android:id="@+id/button[2]"
android:id="@+id/button[3]"
...
Run Code Online (Sandbox Code Playgroud)

感谢您的所有回答。

java layout android

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

如何使用 GIT 忽略发布中的某些文件

我为我们的 Nette web 项目开发了一个核心。核心作为库注入。虽然我希望能够在不注入的情况下测试和尝试核心项目的功能。所以我不得不单独添加启动核心项目所需的文件。这在尝试新功能时非常有用,但我不想在发布中包含这些文件(但仍然可以在 git 上共享,因此同事也可以尝试)。

是否有任何好的做法来处理这种情况?

我只找到了两个选项:

  1. 不要将这些文件提交到 Git 存储库中并通过其他存储库与同事共享文件 - 但这里出现了兼容性问题。
  2. 将这些文件提交到 Git 并有一个单独的分支发布,这些文件在其中被删除。

git composer-php nette

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

标签 统计

android ×1

arduino ×1

c ×1

c++ ×1

composer-php ×1

gcc ×1

git ×1

if-statement ×1

java ×1

layout ×1

mysql ×1

nette ×1

sql ×1