Tag: 函数原型

如何在没有原型的情况下找到C函数?

公司政策规定C源代码中的每个函数都有一个原型。 我inheritance了一个带有自己的make系统的项目(所以我无法在gcc或Visual Studio上测试它)并发现其中一个文件有一些声明没有原型的静态函数。 是否有一种方法(不一定是编译器)列出所有.c文件中没有原型的所有函数?

当你声明一个“指针类型”forms(函数)参数“像一个const数组”时,const是什么?

当你声明一个“指针类型”forms(函数)参数“像一个const数组”时,const是什么? 即:如果T是类型标识符,那么是: void f(const T arr[]); 相当于: void f(const T * const arr); 要么 void f(const T * arr); 要么 void f(T * const arr); 如何解密C / C ++标准以找到这些等价物呢? 🙂 C和C ++之间以及关于上述声明含义的标准的不同化身之间是否存在差异? (对于C – ANSI C89及更高版本的标准是相关的)

头文件中的函数原型与定义不匹配,如何捕获这个?

(我发现这个问题类似但不重复: 如何检查C编程语言中头文件的有效性 ) 我有一个函数实现,以及一个头文件中的不匹配原型(同名,不同类型)。 头文件包含在使用该函数的C文件中,但不包含在定义该函数的文件中。 这是一个最小的测试用例: header.h: void foo(int bar); FILE1.C: #include “header.h” int main (int argc, char * argv[]) { int x = 1; foo(x); return 0; } 文件2.c: #include typedef struct { int x; int y; } t_struct; void foo (t_struct *p_bar) { printf(“%x %x\n”, p_bar->x, p_bar->y); } 我可以使用VS 2010编译它,没有任何错误或警告,但毫不奇怪,当我运行它时会出现段错误。 编译器很好用(我明白了) 链接器没有捕获它(我有点惊讶) 静态分析工具(Coverity)没有抓住它(我非常惊讶)。 […]

编写一个函数的原型,该函数采用正好16个整数的数组

其中一个面试问题让我“编写一个C函数的原型,它采用了16个整数的数组”,我想知道它可能是什么? 也许像这样的函数声明: void foo(int a[], int len); 或者是其他东西? 如果语言是C ++而不是呢?

具有旧样式函数的C编译器的行为,没有原型

当我的程序包含两个文件时: main.c中 #include int main(void) { printf(“%lf\n”,f()); return 0; } func.c double f(int a) { return 1; } 编译器不显示任何错误。 当我的程序只包含一个文件时: main.c中 #include int main(void) { printf(“%lf\n”,f()); return 0; } double f(int a) { return 1; } Visual C ++ 2008编译器显示以下错误: Error 2 error C2371: ‘f’ : redefinition; different basic types d:\temp\projects\function1\function1\1.c 8 function1 任何人都能解释这种奇怪的行为吗?

将参数名称放在C函数原型中?

在C中声明函数时,应该设置一个原型,在该原型中不需要编写参数名称。 只是它的类型就足够了。 void foo(int, char); 我的问题是,还包括参数名称是一个好习惯吗?

C原型function

作为C的初学者,我可以理解文件中对函数原型的需求,但我不确定几件事情。 首先,在main之外的每个函数调用都需要原型声明吗? 有什么条件可以改变吗? 其次,您是否需要单独的函数原型来进行方法重载?

为什么空声明适用于带有int参数的定义但不适用于浮点参数?

我认为区别在于declaration没有参数类型…… 为什么这样做: int fuc(); int fuc(int i) { printf(“%d”, i); return 0; } 但这无法编译: int fuc(); int fuc(float f) { printf(“%f”, f); return 0; } 随着消息: 错误:’fuc’的冲突类型。 注意:具有默认促销的参数类型不能与空参数名称列表声明匹配