- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
gcc 4.4.4 c89
在使用结构体隐藏实现文件中的元素时,我总是这样做。
port.h头文件
struct port_tag;
struct port_tag* open_ports(size_t port_id);
void close_ports(struct port_tag *port);
port.c实现文件
#include "port.h"
typedef struct port_tag {
size_t port_id;
} port_t;
port_t* open_ports(size_t port_id)
{
port_t *port = malloc(sizeof *port);
if(port == NULL) {
return NULL;
}
port->port_id = port_id;
return port;
}
void close_ports(port_t *port)
{
if(port != NULL) {
free(port);
}
}
driver.c驱动文件
#include "port.h"
int main(void)
{
size_t i = 0;
struct port_tag *port = NULL;
for(i = 0; i < 5; i++) {
port = open_ports(i);
if(port == NULL) {
fprintf(stderr, "Port [ %d ] failed to open\n", i);
}
close_ports(port);
}
return 0;
}
在上面的代码中很明显,标签名称是 port_tag,实际类型定义的名称是 port_t。
但是,我正在重新设计一些代码。而且我发现他们使用了一种我以前从未见过的不同方法。我对他们的方法有几个问题。
channel.h头文件
typedef struct channel_t channel_t;
channel_t* open_channels(size_t channel_id);
void close_channels(channel_t *channel);
channel.c实现文件
#include "channel.h"
struct channel_t {
size_t channel_id;
};
channel_t* open_channels(size_t channel_id)
{
channel_t *channel = malloc(sizeof *channel);
if(channel == NULL) {
return NULL;
}
channel->channel_id = channel_id;
return channel;
}
void close_channels(channel_t *channel)
{
if(channel != NULL) {
free(channel);
}
}
driver.c驱动文件
#include "channel.h"
int main(void)
{
size_t i = 0;
channel_t *channel = NULL;
for(i = 0; i < 5; i++) {
channel = open_channels(i);
if(channel == NULL) {
fprintf(stderr, "Channel [ %zu ] failed to open\n", i);
}
close_channels(channel);
}
return 0;
}
1) 当他们声明了 typedef'ed struct 时,它是标签名称或结构本身?
typedef struct channel_t channel_t;
2) 在实现文件中,结构的名称不应该跟在最后一个大括号之后吗?
struct channel_t <-- tag name {
size_t channel_id;
} <-- itsn't this the name of the typedef'ed struct;
非常感谢任何建议,
最佳答案
1.结构类型是struct channel_t
,新的typedef是channel_t
。
这意味着它现在可以用作:
channel_t some_instance;
2。他们在别处创建 typedef,而不是这里。所以所有:
struct channel_t {
size_t channel_id;
};
是用标签channel_t
定义一个结构类型。定义 struct
时不需要 typedef。它可以用作,例如:
struct channel_t some_instance;
如您所见,在这种情况下,这两种语法基本上是等同的。
关于c - 回顾 typedef'ing struct 的 2 种不同方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4201585/
这有点相关:Regular Expression - Formatting text in a block - IM而是一个不同的问题。 根据以下条件寻找 - 的换行文本: 条件: token 可以在
使用 Ruby,我想找到一个正确识别句子边界的正则表达式,我将其定义为以 [.!?] 结尾的任何字符串,除非这些标点符号存在于引号内,如 My friend said "John isn't here
有没有办法在 VBA 正则表达式中进行负面和正面回顾? 如果字符串以“A”开头,我想不匹配,所以我目前在模式的开头执行 ^A,然后删除 match(0) 的第一个字符。显然不是最好的方法! 我正在使用
我正在尝试使用模式替换一些字符串,但我不知道如何检查字符串之前是否有点。.some 应该是负数,some 应该是正数 var a = "some.string is replaced and .so
Random rand = new Random(); Observable random1 = Observable.just(rand.nextInt()); Observable random2
我希望有人可以检查我的正则表达式,以确保它正在执行我希望它执行的操作。 所以这就是我所追求的: 在单词边界内搜索单词 - 因此它可以是单独的单词,也可以是另一个单词中的单词 获取前面的 30 个字符(
我创建了以下触发器来跟踪 postgres 表上的所有更改。 DROP TRIGGER tr_request_update_notify ON requests; CREATE OR REPLACE
关闭。这个问题需要更多focused .它目前不接受答案。 想改善这个问题吗?更新问题,使其仅关注一个问题 editing this post . 2年前关闭。 Improve this questi
这是我的代码: import com.google.gson.JsonElement; import com.rallydev.lookback.LookbackApi; import com.ral
我想创建类似 facebook lookback 的系统,但我不知道。 https://facebook.com/lookback/ 它通过一些带有一些效果的图片生成视频。 你有什么想法可以创造类似的
使用 meteor 1.5.2我安装了最新的 Lookback:meteor-seo 插件,但收到此错误 lookback_seo.js?hash=a658c0f8fd82680b329114c5e6
这里是 HelloGitHub 出品的年度盘点系列,本期我们将盘点 GitHub 在 2020 发生的大事件,回顾一下今年 GitHub 给我们带来了那些惊喜。故事的开始我们要回到一年前从 GitH
最近,我无法使用过去曾与我的帐户一起使用过的 Lookback API 的应用程序。查看控制台后,似乎在向服务器发出请求时出现错误 403。我有一些同事也尝试访问 API,但我们都收到了同样的错误。
gcc 4.4.4 c89 在使用结构体隐藏实现文件中的元素时,我总是这样做。 port.h头文件 struct port_tag; struct port_tag* open_ports(size_
我是一名优秀的程序员,十分优秀!