我的设置模块有一些冗余代码:
#include <QSettings>
class MySettings
{
public:
// param1
void setParam1(QString param1) { _settings.setValue("param1", param1); }
string param1() { return _settings.value("param1").toString(); }
// param2
void setParam2(int param2) { _settings.setValue("param2", param2); }
int param2() { _settings.value("param2").toInt(); }
// param3
void setParam3(int param3) { _settings.setValue("param3", param3); }
int param3() { _settings.value("param3").toInt(); }
private:
QSettings _settings;
}
Run Code Online (Sandbox Code Playgroud)
我设法通过使用宏减少了要编写的代码量。以下是QString参数类型的示例:
#define INTSETTING(setter, getter) \
void set##setter(QString getter) { settings.setValue(#getter, getter);} \
QString getter() {return settings.value(#getter).toString();}
Run Code Online (Sandbox Code Playgroud)
因为我使用的是 C++,所以我知道宏的使用是不好的。我正在寻找更清洁的替代品。
我给出了一个 Qt 示例(QString),但这是一个更一般的问题。
宏使上述类的定义更加简单:
class …
Run Code Online (Sandbox Code Playgroud) 在Windows批处理文件或命令提示符中,start mspaint
例如,调用和mspaint
?之间的区别是什么?他们似乎做了完全相同的事情.
另一个例子,所有4个案例似乎做同样的事情.你能帮我理解微妙的差异是什么吗?
taskmgr
C:\Windows\System32\Taskmgr.exe
start taskmgr
start C:\Windows\System32\Taskmgr.exe
后续:它看起来像start
打开一个单独的后台命令提示符来运行你之后编写的程序(来源:https://technet.microsoft.com/en-us/library/cc770297(v = ws.11).aspx).这与Linux的myApp &
格式相同- 你有&
后缀吗?
我想使用std::chrono::duration
文字,例如10s
表示“10 秒”,如下所示:
std::chrono::duration<uint64_t, std::milli> millisecs = 10s;
Run Code Online (Sandbox Code Playgroud)
但是,我收到此错误:
Run Code Online (Sandbox Code Playgroud)main.cpp:20:17: error: unable to find numeric literal operator 'operator""s' millisecs = 20s; main.cpp:22:17: note: use -std=gnu++11 or -fext-numeric-literals to enable more built-in suffixes
我已经添加-fext-numeric-literals
到我的 gcc 编译命令中:
std::chrono::duration<uint64_t, std::milli> millisecs = 10s;
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
从任何自动生成的STM32CubeMx生成的链接器脚本的底部:
/* Remove information from the standard libraries */
/DISCARD/ :
{
libc.a ( * )
libm.a ( * )
libgcc.a ( * )
}
Run Code Online (Sandbox Code Playgroud)
从GNU Binutils ld(链接程序脚本)手册中,3.6.7输出节丢弃:
特殊输出节名称“ / DISCARD /”可用于丢弃输入节。分配给名为“ / DISCARD /”的输出节的任何输入节均不包含在输出文件中。
这3个输入目标文件包含什么,为什么我们丢弃它们中的所有内容(所有输入部分)?
不幸的是,我发现迭代常规 s 的所有标准技术enum
都不适用于enum class
es,因为枚举类不会隐式转换为整数。
不是如何迭代枚举?,因为我询问的是 an enum class
(即:强类型枚举),而他们询问的是常规enum
(即:弱类型枚举)。
我正在 Linux Ubuntu 18.04 和 20.04 上使用( ) 通过 TCP 以太网向Teledyne LeCroy T3PS3000电源设备发送命令。如果我使用该设备无法正确接收命令,但如果我使用它则工作正常。为什么?netcat
nc
echo
printf
# Example command to Ethernet-connected digital power supply over TCP
# fails
echo 'measure:voltage? ch1' | timeout 0.2 nc 192.168.0.1 5025
# works
printf 'measure:voltage? ch1' | timeout 0.2 nc 192.168.0.1 5025
Run Code Online (Sandbox Code Playgroud)
timeout
cmd: https: //unix.stackexchange.com/questions/492766/usage-of-nc-with-timeouts-in-ms/492796#492796
printf
下面的表格是正确的):如果没有该timeout
命令,我们将不得不使用-w
带有 的选项netcat
,但它只接受以秒为单位的整个整数等待周期超时,如下所示(-w 1
注意将“等待”时间或超时设置为 1 整秒):
printf '%s' "my command to send" | nc -w1 …
Run Code Online (Sandbox Code Playgroud)好吧,我认为标题足够描述(但令人困惑,抱歉).
我正在读这个库:Timer1.
在头文件中有一个指向函数的公共成员指针,如下所示:
class TimerOne
{
public:
void (*isrCallback)();
};
Run Code Online (Sandbox Code Playgroud)
存在TimerOne类的实例化对象,称为"Timer1".
Timer1调用该函数如下:
Timer1.isrCallback();
Run Code Online (Sandbox Code Playgroud)
这怎么回事?我熟悉通过使用dereference运算符通过函数指针调用函数.
例如:
(*myFunc)();
Run Code Online (Sandbox Code Playgroud)
所以我希望通过对象的上述调用更像是:
(*Timer1.isrCallback)();
Run Code Online (Sandbox Code Playgroud)
那么,通过函数指针调用函数的可接受选项是什么,作为独立的函数指针和对象的成员?
arc help --full | less
显示以下内容graft
:
graft revision
Grafts revision and its dependencies (if any) onto your working tree.
--force
Do not run any sanity checks.
--skip-landed
Do not try to patch landed/closed diffs.
Run Code Online (Sandbox Code Playgroud)
这是为了patch
:
patch D12345
patch --revision revision_id
patch --diff diff_id
patch --patch file
patch --arcbundle bundlefile
Supports: git, svn, hg
Apply the changes in a Differential revision, patchfile, or arc
bundle to the working copy.
--arcbundle bundlefile
Apply changes from an arc bundle …
Run Code Online (Sandbox Code Playgroud) 在做了大量测试并写下这个答案之后(注意:在我完全重写它之前对它的反对票),我不明白为什么= {0}
不将结构的所有成员设置为零!
如果你这样做:
struct data_t
{
int num1 = 100;
int num2 = -100;
int num3;
int num4 = 150;
};
data_t d3 = {0};
printf("d3.num1 = %i\nd3.num2 = %i\nd3.num3 = %i\nd3.num4 = %i\n\n",
d3.num1, d3.num2, d3.num3, d3.num4);
Run Code Online (Sandbox Code Playgroud)
...输出是:
d3.num1 = 0
d3.num2 = -100
d3.num3 = 0
d3.num4 = 150
Run Code Online (Sandbox Code Playgroud)
...虽然我预计输出是这样的:
d3.num1 = 0
d3.num2 = 0
d3.num3 = 0
d3.num4 = 0
Run Code Online (Sandbox Code Playgroud)
...这意味着只有 FIRST 成员被设置为零,其余的都被设置为默认值。
我一直认为以这 3 种方式中的任何一种初始化结构都会将其初始化为零,但显然我错了!
data_t d{}
data_t d …
我无法将inet_aton()
ASCII IP 地址转换"192.168.0.1"
为struct in_addr
字节顺序的地址,因为我无法编译代码。
我正在处理这个文件:socket__geeksforgeeks_udp_server_GS_edit_GREAT.c
\n这是我的构建命令:
\ngcc -Wall -Wextra -Werror -O3 -std=c17 \\\nsocket__geeksforgeeks_udp_server_GS_edit_GREAT.c -o bin/server \\\n-lm && bin/server\n
Run Code Online (Sandbox Code Playgroud)\n这是我的命令和错误输出:
\neRCaGuy_hello_world/c$ gcc -Wall -Wextra -Werror -O3 -std=c17 socket__geeksforgeeks_udp_server_GS_edit_GREAT.c -o bin/server -lm && bin/server\nsocket__geeksforgeeks_udp_server_GS_edit_GREAT.c: In function \xe2\x80\x98main\xe2\x80\x99:\nsocket__geeksforgeeks_udp_server_GS_edit_GREAT.c:159:15: error: implicit declaration of function \xe2\x80\x98inet_aton\xe2\x80\x99; did you mean \xe2\x80\x98inet_pton\xe2\x80\x99? [-Werror=implicit-function-declaration]\n retcode = inet_aton("127.0.0.1", &addr_server.sin_addr);\n ^~~~~~~~~\n inet_pton\ncc1: all warnings being treated as errors\n
Run Code Online (Sandbox Code Playgroud)\n我要修复的部分是:
\nimplicit declaration of function \xe2\x80\x98inet_aton\xe2\x80\x99; did you …
Run Code Online (Sandbox Code Playgroud) c++ ×4
c ×2
gcc ×2
arcanist ×1
bash ×1
batch-file ×1
binutils ×1
c++-chrono ×1
cmd ×1
coding-style ×1
command ×1
command-line ×1
enum-class ×1
enumeration ×1
enums ×1
function ×1
gcc-warning ×1
git ×1
glibc ×1
ld ×1
linker ×1
macros ×1
netcat ×1
phabricator ×1
pointers ×1
shell ×1
stm32 ×1
struct ×1
windows ×1