/*------------ miscellaneous -----------------------------------------------*/
/**
* Linkage specification macro
*/
#if !defined(PTAPI_DLL)
#if defined(BUILD_PTAPI_DLL)
#if defined(_MSC_VER)
#if defined(PTAPI_STATIC)
#if defined __cplusplus
#define PTAPI_DLL extern "C"
#else
#define PTAPI_DLL
#endif
#else
#if defined __cplusplus
#define PTAPI_DLL extern "C"
#else
#define PTAPI_DLL extern
#endif
#endif
#elif defined(__SYMBIAN32__)
#if defined(__cplusplus)
#define PTAPI_DLL extern"C" EXPORT_C
#else
#define PTAPI_DLL EXPORT_C
#endif
#else
#if defined(__cplusplus)
#define PTAPI_DLL extern"C"
#else
#define PTAPI_DLL
#endif
#endif
#else
#if defined(_MSC_VER)
#if defined(PTAPI_STATIC)
#if defined __cplusplus
#define PTAPI_DLL extern "C"
#else
#define PTAPI_DLL
#endif
#else
#if defined __cplusplus
#define PTAPI_DLL extern "C" __declspec(dllimport)
#else
#define PTAPI_DLL __declspec(dllimport)
#endif
#endif
#elif defined(__SYMBIAN32__)
#if defined(__cplusplus)
#define PTAPI_DLL extern"C" IMPORT_C
#else
#define PTAPI_DLL IMPORT_C
#endif
#else
#if defined(__cplusplus)
#define PTAPI_DLL extern"C"
#else
#define PTAPI_DLL
#endif
#endif
#endif
#endif
/**
* Macro for standard call convention
*/
#ifndef PTAPI
#if defined(_MSC_VER)
#if defined(_DOS)
#define PTAPI far
#else
#define PTAPI __stdcall
#endif
#else
#define PTAPI
#endif
#endif
/*
nothing doing macros used for better documenting parameter specification
*/
/**
* This is a definition which has sole purpose of
* helping readability. It indicates that formal
* parameter is an input parameter.
*/
#ifndef IN
#define IN
#endif
/**
* This is a definition which has sole purpose of
* helping readability. It indicates that formal
* parameter is an output parameter.
*/
#ifndef OUT
#define OUT
#endif
/**
* This is a definition which has sole purpose of
* helping readability. It indicates that formal
* parameter is both input and output parameter.
*/
#ifndef INOUT
#define INOUT
#endif
/**
* This is a definition which has sole purpose of
* helping readability. It indicates that formal
* parameter is an optional parameter.
*/
#ifndef OPTIONAL
#define OPTIONAL
#endif
某个.h文件中有这样一段
然后.c文件中有PTAPI_DLL PT_STATUS PTAPI PTOpen(。。形参。。。){。函数体。。}
经查定义处发现PTAPI_DLL PT_STATUS PTAPI只有一个是被定义成long型,其他的均定义为空。经请教别人得知,是为了在不同编译器下返回不同的值。PTAPI_DLL PT_STATUS PTAPI只有一个是有效的。
分享到:
相关推荐
2. 函数原型:函数声明的目的是让编译器知道函数的返回类型和参数类型,以便在调用时进行类型检查。 3. 内联函数:C语言提供内联函数机制,试图通过代码复制来避免函数调用开销,但是否实现内联取决于编译器。 4. ...
语义分析阶段,编译器检查程序的逻辑正确性,并可能进行类型检查;中间代码生成阶段,编译器将高级语言转换为抽象的中间表示,便于优化;最后,目标代码生成阶段,编译器将中间代码转化为特定机器架构的目标代码。 ...
6. **main函数的规范**:确保`main`函数的返回类型为`int`,并在结束时添加`return 0`。这样既符合标准,也有助于调试。 7. **作用域和变量定义**:在循环内部定义变量(如`for(int i=0;i;i++)`),确保了变量的...
词法分析器的工作原理通常是通过正则表达式来定义各种类型的词法单元。例如,数字、标识符、关键字、运算符等都有其特定的正则表达式模式。当词法分析器扫描源代码时,它会逐个字符地匹配这些模式,一旦找到一个匹配...
- **方法表集合**:包含类或接口的所有方法信息,包括方法名、返回类型、参数列表等。 - **属性表集合**:提供额外的元数据信息,如源文件路径、方法的局部变量表等。 3. **字节码指令** `class`文件中的每个...
函数的声明定义了其名称、参数列表和返回类型,而函数的定义则包含函数体,即执行的代码。在C++中,还有重载函数的概念,即多个函数可以有相同的名称但参数列表不同,这样可以根据传入的参数类型自动选择合适的函数...
- **Typed @Operator**:控制@运算符返回的指针类型。 - **Open Parameters**:允许不同大小的字符串参数传递。 - **Huge Strings**:切换 Ansistring 和 Shortstring 类型。 - **Assignable Typed Constants**...
它有多种数据类型,如Integer(整型)、Double(双精度浮点型)、String(字符串型)等,用于存储不同类型的数据。 2. **变量与常量**:在VB中,变量用于存储临时信息,而常量则是一旦定义就不能改变的值。了解如何...
3. **函数**:C/C++中的函数是代码组织的基本单元,可以封装一组操作并返回结果。 4. **指针**:C/C++的特色之一,指针可以存储内存地址,允许直接操作内存。 5. **预处理器**:C/C++预处理器负责处理以`#`开头的...
在这个词法分析器中,输出格式为`<$类型,内容>`,例如`<$ID,identifier>`表示标识符,`<$INT,数字>`表示整数。输出同时写入到文件`fp2`,方便后续的语法分析或其他处理。 这个简单的词法分析器对于理解编译原理和...
1. **符号表**:存储识别出的标记及其相关信息,如类型、作用域等。 2. **错误处理**:当遇到不符合词法规则的输入时,如何报告并处理错误。 3. **扫描器**:遍历源代码,识别并返回标记。 4. **编码与解码**:处理...
5. **错误处理**:一个完整的编译器还需要处理语法错误和类型错误。比如,如果用户尝试除以零或对非正数取对数,编译器需要能够检测到这些错误并在运行时抛出异常。 6. **编译原理**:编译器设计涉及词法分析器...
不同于一般的编译器,PClint并不实际生成可执行代码,而是专注于检查源代码中的潜在问题,如语法错误、类型不匹配、未初始化的变量、内存泄漏和其他可能导致程序运行时出错或性能下降的缺陷。由于其对标准的严格遵循...
这些测试用例涵盖了各种CMM语法和特性,可以帮助确保编译器能够正确处理不同的代码情况。 通过这样的编译器,学习者不仅可以理解编程的基本概念,还能通过实际操作看到代码是如何被解析、转换并最终执行的,从而...
高级设计讨论_MiniC 编译器设计 ... + 函数返回类型有限 知识点6: Mini C 语言的应用 * Mini C 语言可以用于 MiniSYS 系统的系统编程和应用编程。 * Mini C 语言可以用于开发基于 MiniSYS 的应用程序。
信息栏则记录关于该标识符的其他信息,如类型、作用域等。 - **查找**:根据给定的名字,在符号表中查找其信息。如果该名字不存在,则将其加入符号表中;如果存在,则返回指向该名字的指针。 - **删除**:从符号表...
这些函数遵循ANSI C标准设计,但为了更好地适应8051微控制器的特性,进行了适当的调整,如函数返回类型和参数类型的优化,以及对unsigned data类型的偏好,从而在保证性能的同时减少了程序的代码量。 ##### 固有...
- 编写匹配模式,其中针对不同的字符类型(如换行符、单词、空白字符)执行相应操作,如增加行数、增加单词数、增加字符数以及计算匹配模式的长度。 - 添加main()函数和yywrap()函数,其中main()函数调用yylex()函数...
5. **优化和处理尾调用**:在某些情况下,连接器可以进行尾调用优化,即如果一个函数的最后一条指令是调用另一个函数,连接器可能会删除返回指令,从而节省栈空间。 6. **生成输出**:完成所有处理后,连接器生成...
3. **语义分析**:在语法正确的基础上,编译器需要确保SQL语句的逻辑意义是正确的,比如表是否存在、字段类型匹配等。这一步通常涉及到数据库元数据的查询和验证。 4. **代码生成**:最后,编译器将解析后的抽象...