我看到了在C11 中用匿名方法实现某种struct继承的方法struct,并想尝试一下。这是我所拥有的:
struct struct_a {
int aa;
};
struct struct_b {
struct struct_a;
int bb;
};
int main(void)
{
volatile struct struct_b my_b;
my_b.aa = 5; /* not a member of my_b */
my_b.bb = 6;
}
Run Code Online (Sandbox Code Playgroud)
来自gcc的结果:
$ gcc -std=c11 struct_extend.c
struct_extend.c:11:20: warning: declaration does not declare anything
struct struct_a;
^
struct_extend.c: In function ‘main’:
struct_extend.c:18:9: error: ‘volatile struct struct_b’ has no member named ‘aa’
my_b.aa = 5; /* not a member of …Run Code Online (Sandbox Code Playgroud) 我设置了一个干净的过滤器来应用自动套用格式和 uncrustify。相应的污迹过滤器不执行任何操作,它只是调用cat.
[filter "autoformat"]
clean = uncrustify -c ~/tmp/autoformat/uncrustify.cfg --replace
smudge = cat
Run Code Online (Sandbox Code Playgroud)
我的问题是,当我签出 eg 时master,git 说我的工作树与提交不同,而显示的差异是 clean 过滤器的作用。
看来 clean 过滤器是在 diff 之前应用的。那是对的吗?是否可以禁用此功能?这是个好主意吗?
我想要一个将自动格式应用于暂存区域的解决方案,即仅暂存的块。清洁过滤器不是一个合适的解决方案吗?
在我的 uncrustify 配置中,主提交不符合我的编码标准,checkout -f HEAD^然后checkout master -f显示了差异。这既令人困惑又麻烦(git 拒绝签出其他内容,以防止丢失更改)。
我正在研究PIC16F88X的I2C协议.我想做的是根据I2C上接收的数据启用I2C从设备ACK或NACK.
PIC可以对线路上发送的I2C地址进行ACK或NACK,但根据我的读取,它将始终在后续接收的字节上进行ACK.那是对的吗?
在以下沟通中:
Start - I2c_Addr+write/ACK - Register_value/Nack
Run Code Online (Sandbox Code Playgroud)
我希望奴隶能够根据寄存器_值中的值来确认Ack或Nack .如果从站不理解寄存器_值,则不应该Ack.
有人可以确认这是不可能的,或告诉我该怎么做?
我有一个vhdl设计,需要适应不同的变种.能够从makefile生成配置会很高兴.用于生成一个项目的makefile已准备就绪并正常工作.
我想避免为不同的项目使用不同的非常相似的文件.项目之间的唯一区别是某处有几行,其中一行包含一堆vhdl文件(和组件),而另一组则不需要.
例如,我想避免使用两个不同的顶级vhd文件.相反,我想在顶层文件中使用条件,以包含(或不包含)其他vhdl文件和组件,具体取决于项目.
你有什么建议怎么做吗?
我曾尝试使用外部预编译器(gcc),但无法使其正常工作.此外,我真的不想强迫其他开发人员安装gcc,或者不能在Xilinx IDE中使用vhdl文件.
编辑:添加示例
我有两个产品,A和B.我想为两个产品使用相同的文件,条件为产品B排除某些部件,为不同的HW部件生成配置,当然还有其他东西.
我想从命令行生成配置:
make product_A和make product_B.
如果我generates根据目标输入我的vhdl来包含/排除代码,那么xst需要知道正在构建什么目标.问题是如何将当前目标从makefile传递给xst.
在用gcc编译的C代码中,我输入了源代码:
#if defined(product_B)
...
#elsif defined(product_A)
...
#endif
Run Code Online (Sandbox Code Playgroud)
,然后在makefile中设置define:
product_A: source.c
gcc -Dproduct_A source.c
product_B: source.c
gcc -Dproduct_B source.c
Run Code Online (Sandbox Code Playgroud) 这在C++ 11中似乎不起作用:
class B : public A
{
public:
B(const A& a)
: A(a) // parent constructor for passing the parameter
, B() // delegating constructor for init of other members
{};
// ...
};
Run Code Online (Sandbox Code Playgroud)
gcc告诉我an initializer for a delegating constructor must appear alone.
我如何用参数调用父类的构造函数,并调用B类的基本构造函数?(我在B中有一堆其他需要相同行为的构造函数).
现在我正在考虑编写一个私有B::init()函数并在所有构造函数体中使用它,但这很有点像C++ 03.
什么是首选解决方案?
我从源代码安装了一个新的lib,我正在尝试链接到它.链接器抱怨它无法找到应该在lib中的符号.
以下是我得到的错误:
$ make all
gcc -std=c99 -g -Wall -O3 `pkg-config --cflags --libs libmodbus` -c client.c -o client.o
gcc -std=c99 -g -Wall -O3 `pkg-config --cflags --libs libmodbus` client.o -o client
client.o: In function `main':
/home/gauthier/code/modbus/client.c:29: undefined reference to `modbus_new_tcp'
/home/gauthier/code/modbus/client.c:30: undefined reference to `modbus_connect'
/home/gauthier/code/modbus/client.c:33: undefined reference to `modbus_read_registers'
/home/gauthier/code/modbus/client.c:35: undefined reference to `modbus_close'
/home/gauthier/code/modbus/client.c:36: undefined reference to `modbus_free'
collect2: error: ld returned 1 exit status
make: *** [client] Error 1
Run Code Online (Sandbox Code Playgroud)
pkg-config 这样说:
$ pkg-config --cflags --libs libmodbus
-I/usr/local/include/modbus -L/usr/local/lib …Run Code Online (Sandbox Code Playgroud) 我有一个相当简单的脚本(在向每一行添加时间戳后从 tty 打印内容)。它在命令行上输出很好,但重定向输出>不起作用。为什么不?
这是脚本:
#!/bin/bash
awk '{ print strftime("%Y-%m-%d %H:%M:%S |"), $0; }' "$1"
Run Code Online (Sandbox Code Playgroud)
按原样运行它,就像timecat /dev/ttyACM0工作正常一样,我在终端中看到了内容。
但如果我跑timecat /dev/ttyACM0 > ~/tmp.log,什么都没有出来。与tee. 文件在那里,但它是空的。
awk脚本中有什么奇怪的东西,我该如何修改它以使重定向工作?
我试图在makefile中的条件中执行命令.
我让它在shell中工作:
if [ -z "$(ls -A mydir)" ]; then \
echo "empty dir"; \
else \
echo "non-empty dir"; \
fi
Run Code Online (Sandbox Code Playgroud)
但是如果我在makefile中尝试它,那么"$(ls -A mydir)"无论是否asdf为空都会扩展为空:
all:
if [ -z "$(ls -A mydir)" ]; then \
echo "empty dir"; \
else \
echo "non-empty dir"; \
fi
Run Code Online (Sandbox Code Playgroud)
该ls命令没有像我期望的那样扩展:
$ mkdir mydir
$ make
if [ -z "" ]; then \
echo "empty dir"; \
else \
echo "non-empty dir"; \
fi
empty dir
$ touch …Run Code Online (Sandbox Code Playgroud)