Tag: typedef

为什么typedef不是强类型的?

typedefs没有强类型的原因是什么? 有什么好处我看不到,还是因为向后兼容? 看这个例子: typedef int Velocity; void foo(Velocity v) { //do anything; } int main() { int i=4; foo(i); //Should result in compile error if strongly typed. return 0; } 我不是要求变通方法来获得强类型数据类型,而只是想知道为什么标准不要求强类型的typedefs ? 谢谢。

重新定义; 不同的基本类型(typedef struct)

当我们在不同的文件中定义结构时,我在尝试使结构正常工作时遇到了一些麻烦。 据我所知,错误告诉我结构被定义了两个不同的时间。 我相信也许我可能需要在某处使用extern? 我尝试过试验并在Google上寻求帮助,但无济于事。 任何帮助都将非常感谢,谢谢。 我的所有四个文件都在下面。 文件:Foo.h typedef struct { int number; } my_struct; // Redefinition; different basic types 文件:Foo.c #include “Foo.h” #include “Bar.h” #include my_struct test; int main(void) { test.number = 0; DoSomething(&test); printf(“Number is: “, &test.number); } 文件:Bar.h #include “Foo.h” void DoSomething(my_struct *number); 文件:Bar.c #include “Bar.h” void DoSomething(my_struct *number) { number->number = 10; […]

为什么在这个接口中使用`typedef void * COMPLEX`?

我有一个程序,我无法理解它是如何工作的。 这是它的一部分。 我不明白行typedef void *COMPLEX ,这个命令以及为什么使用struct COMPLEX_IMPL 。 #ifndef _COMPLEX_H #define _COMPLEX_H typedef void *COMPLEX; COMPLEX NewCOMPLEX (double a, double b ); void DeleteCOMPLEX(COMPLEX this ); double GetA (COMPLEX this ); double GetB (COMPLEX this ); COMPLEX AddComplex (COMPLEX c1, COMPLEX c2, COMPLEX res); COMPLEX MultComplex (COMPLEX c1, COMPLEX c2, COMPLEX res); #endif /* _COMPLEX_H […]

C中的运行时条件typedef

我知道这个问题有一个C ++版本,但是我使用的是标准的typedef而不是模板。 我编写了一个适用于16位wav文件的程序。 它通过将每个样品加载到一个短片中来实现。 然后程序在短路上执行算术运算。 我现在正在修改程序,因此可以同时使用16位和32位的wav。 我希望做一个条件typedef,即使用16位的short和32位的int。 但后来我意识到,如果编译器事先不知道变量的类型,编译器可能就不会编译代码。 所以我试着测试下面的代码: #include int main() { int i; scanf(“%i”, &i); typedef short test; if(i == 1) typedef short sample; else typedef int sample; return 0; } 并得到以下编译器错误: dt.c: In function ‘main’: dt.c:12:5: error: expected expression before ‘typedef’ dt.c:14:5: error: expected expression before ‘typedef’ 这是否意味着C中的运行时条件typedef不可能? [开放式问题:]如果没有,你们将如何处理这样的事情?

C中是否需要typedef?

Typedef对于可移植名称,标记名称( typedef struct foo Foo; )以及保持复杂(函数)声明可读( typedef int (*cmpfunc)(const void *, const void *); )非常有用。 但是在C中是否存在真正需要typedef的情况? 通过简单地写出派生类型,你无法做到这一点。 澄清一点:我的意思是语言用户,而不是实施者。 整个stdint.h是第二类的一个很好的例子。 结论 感谢您的输入。 我想我可以总结为: C99库需要typedef来实现各种(u)intN_t类型。 在C89上,你真的想自己使用typedef来创建类似的可移植类型。 使用va_arg宏时可能需要typedef,但我怀疑你在实践中会遇到这些衍生类型。

从未定义结构

在C中使用未定义的结构有什么好处吗? SQLite源代码中的示例: /* struct sqlite3_stmt is never defined */ typedef struct sqlite3_stmt sqlite3_stmt; 对象被操纵如下: typedef struct Vdbe Vdbe; struct Vdbe { /* lots of members */ }; int sqlite3_step(sqlite3_stmt *pStmt) { Vdbe *v = (Vdbe*) pStmt; /* do stuff with v… */ } 那么为什么不使用通常的抽象类型,在foo.c源中私有定义的实际结构和foo.h头中的公共typedef ?

最佳实践:我应该在C或C ++中为字节创建typedef吗?

你更喜欢在代码中看到类似t_byte* (带有typedef unsigned char t_byte )或unsigned char*的东西吗? 我倾向于在我自己的图书馆中使用t_byte ,但从未参与过这种方法的大型项目,我对这些陷阱感到疑惑。

C:typedef结构中的函数指针

我试图在C中创建一个链接列表,但试图在一些C ++样式类中很好地打包它。 我有一些问题,但在C中使用函数指针。 typedef struct linkedList { int count; struct msgNode *front; struct msgNode *back; void (*addMSG)(unsigned char *, int, struct linkedList *); } msgList; void addMSG(unsigned char *data, int size, struct linkedList *self); 理想情况下,我希望你可以让你列出然后添加你可以简单地在结构中调用一个“方法”(函数),模拟你在C ++中看到的行为。 当我调用addMSG时,我得到了一个分段错误,当然这是因为addMSG没有指向一个函数。 但是,我不想指定一个函数指向我想要使用链表的每一次。 有没有很好的方法来获得函数指针而不必隐式地指向函数,或者你是否必须隐式地指向函数? 这只是这里显示的部分实现。 最后,这个结构将具有所有必要的function。 这只是为了让这个问题简短而重要。

C中的typedef stuct问题

我面临一个奇怪的问题我已经定义了一个C头文件中的结构: typedef struct iRecActive{ char iRecSID[32]; unsigned char RecStatus; int curSel; }iRecAcitve_t; 但是当我在另一个文件中使用相同的结构时,编译器无法识别结构,即使我已经仔细检查过我已经包含了它的头文件。 以下是错误: :错误C2065:’iRecActive_t’:未声明的标识符 以下是我定义结构的文件的完整代码 #ifndef _TS_HTTP_APPLICATION_H_ #define _TS_HTTP_APPLICATION_H_ #ifdef __cplusplus extern “C” { #endif typedef struct iRecActive{ char iRecSID[32]; unsigned char RecStatus; int curSel; }iRecAcitve_t; int startHTTPServer(int HTMLserverPort); int closeHTTPServer(); int openTS_SegmenterN(); void pushTSDataN(unsigned char* TSData, int len); void closeTS_SegmenterN(); void removeAllConnections(); #ifdef […]

C中的循环定义

我写的是: typedef enum _MyStatus { MY_STATUS_OK = 0, MY_STATUS_GENERAL_ERROR = -1, } MyStatus; typedef MyStatus (*MyCallback)(MySettings *settings); typedef struct _MySettings { MyCallback callback; } MySettings 但是,它不会像定义MyCallback时那样编译它不知道MySettings。 如果我交换MySettings和MyCallback,那将是另一回事:MySettings不会知道MyCallback。 在C中处理这类问题有多普遍? 谢谢!