如果您找到更好的方式来描述它,请随意修改此问题的标题.
想象一下,我们有:
my $foo = something;
my $newfoo = $foo =~ s/.*/something else/;
Run Code Online (Sandbox Code Playgroud)
我以为我会有$newfoo = something else
,而我发现它等于1.我想这个1就是说'匹配和替换成功'.
我发现的唯一解决方案是后续的:
my $foo = something;
my $newfoo = $foo;
$newfoo =~ s/.*/something else/;
Run Code Online (Sandbox Code Playgroud)
有没有办法完成相同的任务,即创建一个新的变量与正则表达式的结果而不修改第一个变量,没有中间步骤?
我有这个功能:
int firstHeapArray (IntHeapArray h) {
if(!emptyHeapArray(h))
return h.array[0];
}
Run Code Online (Sandbox Code Playgroud)
它被声明为int,这是IntHeapArray结构:
typedef struct intHeapArray {
int *array;
int size;
} IntHeapArray;
Run Code Online (Sandbox Code Playgroud)
你能说出为什么我在编译时会收到这个警告吗?
heap-test.c: In function ‘firstHeapArray’:
heap.h:31:1: warning: control reaches end of non-void function
Run Code Online (Sandbox Code Playgroud)
非常感谢你.
我有这个C代码,我确信它不会起作用,但确实如此.
#include <stdio.h>
int* find (int* a, int val) {
if (*a == val)
return a;
else
find(a+1, val);
}
int main() {
int a[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
int *b;
b = find(a, 7);
printf("%d\n", *b);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当然,我从gcc收到警告,因为它在find
函数的else分支中缺少return语句.但是,它完美地运作.
为什么会这样?如何通过递归函数返回int?当然,最后一次调用返回一个int,但我在void上下文中调用它.
对不起,标题.随意将其编辑为更清晰的内容.
我有一个字符串,我必须检查此字符串的第一个字符串是否等于其他给定字符之间的至少一个,例如B,Z和K(在我的情况下,我有大约10个字符要检查,它们不是可归类为范围).
我正在按如下方式进行检查.
if (string[0] == 'Z' || string[0] == 'K' || string[0] == 'B') {
/* do something... */
}
Run Code Online (Sandbox Code Playgroud)
有没有更简单的方法呢?
我正在尝试在我的应用程序中实现一个线程池系统.我希望每个线程都有一个指向我正在使用的线程池结构的指针.所以,基本上我有两个类似于以下的结构:
typedef struct thread_pool {
/* some fields here */
single_thread **tds;
} thread_pool_t;
typedef struct single_thread {
/* some fields here */
thread_pool_t *tp;
} single_thread_t;
Run Code Online (Sandbox Code Playgroud)
独立于声明的顺序,编译器将给出错误.我解决了在第一个结构之前声明第二个结构,但声明它是空的.现在我没有收到任何错误,但我总是得到以下警告:
serv_inc/thrhandler.h:23:16: warning: useless storage class specifier in empty declaration [enabled by default]
Run Code Online (Sandbox Code Playgroud)
有没有办法避免这种警告并取得同样的结果?我做错了,是否有更有效的解决方案来解决这个问题?