Tag: 声明

我是否应该考虑声明所有C静态函数是一个很好的实践?

我最近写了一段像这样的C代码: static void func1() { } static void func2() { } typedef void (*func_t)(void); const func_t lookUpTable[FUNC_COUNT] = { [FUNC1] = &func1, [FUNC2] = &func2 } 另一个程序员在同一个文件上工作并将其更改为: static void func1(); static void func2(); typedef void (*func_t)(void); const func_t lookUpTable[FUNC_COUNT] = { [FUNC1] = &func1, [FUNC2] = &func2 } static void func1() { } static void […]

C变量声明的效率

在C中声明变量需要多长时间,例如int x或unsigned long long var ? 我想知道它是否会使我的代码更快地在这样的东西。 for (conditions) { int var = 0; // code } 这样做会更快,还是更容易? int var; for (conditions) { var = 0; // code } 谢谢您的帮助。

在for循环中声明和初始化变量

我可以写简单吗? for (int i = 0; … 代替 int i; for (i = 0; … 在C或C ++? (并且变量i只能在循环中访问吗?)

在全局范围内将声明与extern,static和no存储说明符混合使用

我一直在研究何时可以在全局范围内混合使用extern , static和no storage specifier声明的变量。 结果让我很困惑。 这是我发现的(每个段落是一个单独的编译单元): /* ok */ int x; int x; /* ok */ int f(); int f(); /* ok */ int x; extern int x; /* ok */ int f(); extern int f(); /* error: static declaration follows non-static declaration */ int x; static int x; /* ok (no warning) */ […]

在隐式函数声明的情况下的默认参数提升

我试图搜索旧问题,但我没有解决我的问题。 我试着解释我的怀疑; 假设在c89模式下工作,如果在函数调用之前没有函数的原型,则存在函数的隐式声明,函数的类型为int ,参数通过Default Argument Promotions转换: char或short int类型的对象(无论是否有符号)被提升为int或unsigned int,视情况而定; 并且float类型的对象被提升为double类型。 所以,如果我写这样的代码,我同意它必须工作: int main(void){ char a; short b,c; f(a,b,c); return 0; } int f(int a,int b,int c){ return 1; } 和这里一样: int main(void){ float a; short b,c; f(a,b,c); return 0; } int f(double a,int b,int c){ return 1; } 但我不明白为什么以下2个案例有效 /*a)*/ int main(void){ short a,b; float […]

我没有得到以下指针变量声明在c中的含义

char(*p)[15]; char(*p)(int *a); int(*pt)(char*); int *pt(char*); 有人帮忙吗?

我怎样才能理解这个C类型声明?

double (*bar(int, double(*)(double,double[])))(double); 在回顾演讲幻灯片时,我找到了一个留给学生的练习: 用简单的英语,这个C声明中的bar类型是什么? 请帮我一步。 我甚至不知道从哪里开始,除了有些东西最终会返回双倍。

重新申报错误

我已经理解了声明和定义之间的区别当我遇到疑问时,我正在练习一些问题,下面的代码要求我列出代码片段中的错误。 f(int a,int b) { int a; a=20; return a; } 为什么这会给出重新声明错误? 它不应该给出a的多重定义,因为: f(int a,int b) – 这里定义了吗? 在函数体中, int a被定义了吗? 那么为什么不是多重定义错误?

如何在ANSI C中的结构中使用枚举?

以下代码必须在main-function中使用,但我不知道它是如何使用的。 struct SomeItem { enum {MOVIE, MUSIC} itemType; union { struct Movie* movie; struct Music* music; }; }; 这个结构用在带有previous / item / next指针的动态链表中,但我不知道如何设置枚举。 或者如何初始化它。 我需要知道它在main函数中的样子。 biglist.someitem = ???; /* declaration I use */ struct Library* biglist; 更多代码,以了解我想做什么。 struct Library{ struct SomeItem* someitem; struct SomeItem* previousItem; struct SomeItem* nextItem; }; 编译器错误:C2037:’someitem’左侧指定未定义的struct / union’library’C2065:MOVIE:未声明的标识符 我仍然是ANSI C的新手,所以不要拍我好;)

崩溃线程*(int *)NULL = 1; 有问题?

我在multithreadingc应用程序中发现了这一点。 作者评论说它用于在自定义断言函数中使线程崩溃。 海湾合作委员会对它很好,但是clang发出以下警告: note: consider using __builtin_trap() or qualifying pointer with ‘volatile’ 并且对于assert函数的每次使用,还会发出其中一个: warning: indirection of non-volatile null pointer will be deleted, not trap 这里发生了什么? __builtin_trap特定于clang? 我应该用吗?