我有以下代码:
int add_ii(int a, int b) { return a + b; }
unsigned add_iu(int a, unsigned b) { return a + b; }
unsigned add_ui(unsigned a, int b) { return a + b; }
unsigned add_uu(unsigned a, unsigned b) { return a + b; }
#define add(LEFT, RIGHT) \
_Generic(LEFT \
,int: _Generic(RIGHT \
,int: add_ii \
,unsigned: add_iu \
) \
,unsigned: _Generic(RIGHT \
,int: add_ui \
,unsigned: add_uu \
) \
)(LEFT, RIGHT)
int main() {
return add(1, …Run Code Online (Sandbox Code Playgroud) 我很难记住哪一个参数扩展${var%subst}或${var#subst}从字符串的前面删除,哪一个从字符串的后面删除。例子:
$ var=/a/b/c
$ echo dirname=${var#/*} filename=${var%%*/}
dirname=a/b/c filename=/a/b/c # Wrong!
$ echo dirname=${var%/*} filename=${var##*/}
dirname=/a/b filename=c
Run Code Online (Sandbox Code Playgroud)
我总是将它们混合在一起,最终要么编写一些测试命令,要么查看手册。很容易记住%%删除 more then %,因为then%%是一个更长的字符串%,2 个字符 vs 1 个字符,与##vs相同#。但我总是%和#.
是否有内存规则可以知道字符串的哪一端%或#从哪一端删除?
我经常犯以下错误:
import enum
class StatusValues(enum.Enum):
one = "one"
two = "two"
def status_is_one(status: str):
return status == StatusValues.one
Run Code Online (Sandbox Code Playgroud)
String 永远不会是枚举类。问题是它应该是StatusValues.one.value。
是否有一个strcmp(status, StatusValues.one)-ish 函数,以便我的pyright在我将字符串与类进行比较时会出错?有没有好的方法来防止此类错误?
考虑以下程序
\nextern const int foo;\nextern void blah(void);\n\nint toto(void) {\n int x = foo;\n blah();\n int y = foo;\n return x + y;\n}\nRun Code Online (Sandbox Code Playgroud)\narm-linux-gnueabihf-gcc -std=c99 -O2 -fno-pic -S extern_const2.c将其编译为
toto:\n @ args = 0, pretend = 0, frame = 0\n @ frame_needed = 0, uses_anonymous_args = 0\n movw r3, #:lower16:foo\n movt r3, #:upper16:foo\n push {r4, lr}\n ldr r4, [r3]\n bl blah\n lsls r0, r4, #1\n pop {r4, pc}\nRun Code Online (Sandbox Code Playgroud)\n请注意,foo被读取一次,然后左移 1,这意味着假设gcc其值在函数调用期间保持不变。观察到类似的行为 …
嘿大家.我正在尝试用C++编写一个程序来计算Fibonacci系列.我创建了一个执行计算和输出的线程.但是我的for循环中没有任何东西似乎被执行了.任何人都可以查看我的代码并告诉我我可能做错了什么?
#include <iostream>
#include <Windows.h>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
//iterative with output
DWORD WINAPI fib3(LPVOID param){
double u = 0;
double v = 1;
double t;
int upper = *(int*)param;
for(int i = 2; i <= upper; i++){
cout << v << " ";
t = u + v;
u = v;
v = t;
cout << "testing" << endl;
}
cout << v << " ";
return 0;
}
int main(int argc, char *argv[]){
cout << …Run Code Online (Sandbox Code Playgroud) 我有一个cpp文件如下:
#include <iostream>
#include "i.h"
using namespace std;
typedef struct abc{
int a1;
int b1;
} abc_t, *abc;
void fun(abc x){
cout<<x->a1;
}
int main(){
abc val;
fun(val);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
ih文件:
struct abc;
void fff(struct abc);
Run Code Online (Sandbox Code Playgroud)
当我编译代码时出现以下错误:
t.cpp:8: error: conflicting declaration ‘typedef struct abc* abc’
t.cpp:5: error: ‘struct abc’ has a previous declaration as ‘struct abc’
t.cpp: In function ‘void fun(abc)’:
t.cpp:11: error: base operand of ‘->’ has non-pointer type ‘abc’
Run Code Online (Sandbox Code Playgroud)
如果我将cpp文件保存为c文件并使用c编译器进行编译,那么一切正常.c ++编译器有什么问题?
结构box的定义box.h如下:
typedef struct box {
int (*func1) (const void *p1, const void *p2);
void (*func2) (void *p3);
} Box;
Run Code Online (Sandbox Code Playgroud)
box.c包括box.h并具有以下功能:
int create_box(int (*func1)(const void *p1, const void *p2), void (*func2)(const void *p3), Box **box) {
Run Code Online (Sandbox Code Playgroud)
create_box根据提供的参数被调用以初始化一个盒子。我正在努力弄清楚如何将提供的函数指针分配给结构的字段。首先,我首先通过分配内存给**boxvia(*box) = malloc(sizeof(Box));
但是,然后我尝试通过分配函数指针的参数
(*box)->func1 = (func1)(&p1, &p2);
(*box)->func2 = (func2)(&p3);
Run Code Online (Sandbox Code Playgroud)
运行此命令将告诉我所有指针均未声明。显然,我对函数指针的工作方式有误解,但是我不明白我应该如何初始化它们(如果这就是写词)。我试着更换右侧(*func1)(*p1, *p2),(func1)(p1, p2),(*func1)(p1, p2),(*func1)(&p1, &p2),等但他们没有得到任何东西,我能理解。如何正确初始化此结构的函数指针?
如果相关的话,我正在C90工作。