小编Sco*_*ott的帖子

如何创建 C 工厂函数?

我有一个带有函数指针的结构,如下所示:

typedef int (*node_transition_func)( wint_t );

typedef struct lex_dfa_arc_t {

    node_transition_func func;
    int expected_return_val;
    struct lex_dfa_node_t * node;

} LEX_DFA_ARC_T;
Run Code Online (Sandbox Code Playgroud)

现在我想创建一个返回原型“int func( wint_c );”的函数的函数 例如:

node_transition_func input_equals( wint_t input, wint_t desired ) { ... }
Run Code Online (Sandbox Code Playgroud)

上面的函数在C语言中是否可以实际工作?我试图避免为每个字母定义一个函数(例如 input_equals_letter_a、input_equals_letter_b、input_equals_letter_c 等)。

我的另一种方法是让 node_transition_func 接受所需字符的 wint_t 和 wchar_t* ,但我很好奇我的第一种方法是否有效。

谢谢!

c

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

C阵列初始化

我很好奇C如何处理数组初始化.我的程序中有以下代码:

UChar match[] = {0xdf, 'a', 'b', '\0'};
Run Code Online (Sandbox Code Playgroud)

基本上,这是初始化UTF-16字符串.在这种情况下,UChar是16位.

我的问题是:我需要字符串末尾的尾随NULL字节,但是有必要将它包含在初始化中,还是C会自动包含所有数组初始化的字节?

c arrays initialization

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

反正有没有清除python字节码缓存?

我正在运行的每个单元测试都是将python代码写入文件,然后将其作为模块导入.问题是代码更改但进一步的import语句不会修改模块.

我认为我需要的是一种方法来强制重新加载模块或清除内部字节码缓存.有任何想法吗?

谢谢!

python cpython

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

C中的join()或implode()

我喜欢Python和PHP的一件事是能够轻松地从数组中创建一个字符串:

Python: ', '.join(['a', 'b', 'c'])
PHP: implode(', ', array('a', 'b', 'c'));
Run Code Online (Sandbox Code Playgroud)

但是,我想知道是否有人用直观而明确的方式在C中实现这一点.谢谢!

c c-strings

4
推荐指数
3
解决办法
6994
查看次数

ANSI C无回声键盘输入

我一直在谷歌搜索没有运气.我正在寻找一种方法来做getc()或gets()或任何不回应终端的方法.我看到了kbhit(),但这似乎不是ANSI的一部分.理想情况下,我希望代码看起来像

char s[100];
no_echo_gets(s); /* Won't echo to screen while being typed */
printf("%s\n", s);
Run Code Online (Sandbox Code Playgroud)

有没有人知道一个良好的ANSI兼容的方式来做到这一点?

c

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

使用ANTLR解析Markdown blockquote

这一直困扰着我一段时间.如何使用ANTLR将以下文本解析到下面的HTML中?我似乎根本无法解决这个问题.

有任何想法吗?

降价:

> first line
> second line
> > nested quote

输出HTML:

<blockquote>
  <p>first line
  second line</p>
  <blockquote>
    <p>nested quote</p>
  </blockquote>
</blockquote>
Run Code Online (Sandbox Code Playgroud)

compiler-construction markdown parsing antlr ll-grammar

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

你如何解析上下文敏感的C代码?

我遇到的一个问题是C必须是上下文敏感的,并且无法使用一个前瞻标记进行解析.例如

int main1;
int main() {}
Run Code Online (Sandbox Code Playgroud)

这是我能想到的最简单的例子,其中函数定义和变量声明都以相同的标记类型开头.您必须一直向前看左边的paren或分号以确定要解析的内容.

我的问题是,这是如何实现的?词法分析器是否有一些技巧可以进行前瞻,并发出一个区分两者的隐形标记?现代解析有很多前瞻性的标记吗?

c parsing lexical-analysis

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

什么是设置类变量的pythonic方法?

也许我问的是错误的问题.我有这样的代码:

class ExpressionGrammar(Grammar):
  def __init__(self, nonterminals, terminals, macros, rules, precedence, nonterminal_name = '_expr'):
    self.nonterminals = nonterminals
    self.terminals = terminals
    self.rules = rules
    self.macros = macros
    self.precedence = precedence
    self.nonterminal = nonterminal
Run Code Online (Sandbox Code Playgroud)

而且我发现总是必须要自我x = x.我知道python试图避免重复,那么做这样的事情的正确方法是什么?

python

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

C头文件包含错误

希望这是一个直截了当的问题......这是我重现这个问题的过程.首先我创建我的源文件:

bash $ cat t.c
#include "t.h"

int main()
{
  ABC abc;
}
Run Code Online (Sandbox Code Playgroud)

然后我创建相应的头文件:

bash $ cat t.h
#ifdef _T_H
#define _T_H

#ifdef __cplusplus
extern "C" {
#endif

typedef struct abc { 
  int a;
} ABC;

#ifdef __cplusplus
}
#endif

#endif
Run Code Online (Sandbox Code Playgroud)

然后,我尝试编译它:

bash $ gcc -o t t.c
t.c: In function ‘main’:
t.c:5: error: ‘ABC’ undeclared (first use in this function)
t.c:5: error: (Each undeclared identifier is reported only once
t.c:5: error: for each function it appears in.)
t.c:5: error: …
Run Code Online (Sandbox Code Playgroud)

c compiler-construction gcc header

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