Tag: c89

转发申报文件*

如何在C中转发声明FILE * ? 我通常使用struct MyType;执行此操作struct MyType; ,但自然这似乎不可能。 如果C标准或编译器与C ++之间的行为不同,这也是有意义的。 Update0 为什么我要把这个放在一边:我要问的是如何转发声明一个非结构/“typedef’d结构”类型,以便我可以声明指向它的指针。 显然使用void *并将其转换为源文件有点hackish。

将一个int指针转换为char ptr,反之亦然

问题很简单。 据我了解,GCC认为字符将是字节对齐的,并且在32位环境中对齐4字节对齐。 我也知道C99标准6.3.2.3,它表示在未对齐的指针类型之间进行转换会导致未定义的操作。 C的其他标准对此有何评论? 这里也有许多经验丰富的编码员 – 对此有任何看法将不胜感激。 int *iptr1, *iptr2; char *cptr1, *cptr2; iptr1 = (int *) cptr1; cptr2 = (char *) iptr2;

C检查文件是否存在

在我必须用C89标准做的项目中,我必须检查文件是否存在。 我该怎么做呢? 我想过要用 FILE *file; if ((file = fopen(fname, “r”)) == NULL) { printf(“file doesn’t exists”); } return 0; 但我认为可能有更多的情况,然后文件不存在,将执行fopen == NULL。 我该怎么做呢? 我宁愿不使用包含而不是。

ANSI C(ISO C90):scanf可以读取/接受unsigned char吗?

简单的问题:scanf可以读取/接受“小整数”到ANSI C中的unsigned char吗? 示例代码un_char.c: #include #include int main(void) { unsigned char character; scanf(“%hhu”, &character); return EXIT_SUCCESS; } 编译为: $ gcc -Wall -ansi -pedantic -o un_char un_char.c un_char.c: In function ‘main’: un_char.c:8: warning: ISO C90 does not support the ‘hh’ gnu_scanf length modifier ISO C90不支持hh 。 那么在这种情况下可以使用什么scanf转换?

C89标准中的哪个部分允许“隐式整数”规则?

使用gcc ,代码: register a = 3; static b = 3; 虽然有警告,但在使用-std=c89 -pedantic-errors标志时允许使用它。 但是,它会收到-std=c99 -pedantic-errors标志-std=c99 -pedantic-errors 。 我想知道C89标准的哪一部分允许“隐含整数”规则?

警告:此十进制常量仅在ISO C90中无符号

一段代码: long rangeVar = 0; rangeVar = atol(p_value); if (rangeVar >= -2147483648 && rangeVar <= 2147483647) 在编译时,我得到: 警告:此十进制常量仅在ISO C90中无符号 提前致谢

定义中函数标题后的C变量声明

在阅读一些FreeBSD源代码时(参见: radix.h第158-173行),我发现了定义中“函数标题”之后的变量声明。 这在ISO C(C99)中有效吗? 什么时候应该在生产代码中完成而不是仅仅在“函数标题”中声明变量? 为什么要在这里完成? 我指的是标题字符串的函数,如下所示: int someFunction(int i, int b) {

在MS Visual C ++中启用VLA(可变长度数组)?

如何在MS Visual C ++中启用使用C99中定义的VLA或可变长度数组,或者根本不可能? 是的我知道C ++标准是基于C89的,并且VGA在C89标准中不可用,因此在C ++中不可用,但MSVC ++也应该是C编译器,可以使用/ TC编译器参数( Compile as C Code (/TC) )。 但这样做似乎并没有启用VLA,并且编译过程在构建为C ++( Compile as C++ Code (/TP) )时会出现相同的错误。 也许MSVC ++ C编译器只符合C89或者我缺少一些东西(一些特殊的构造或pragma / define)? 代码示例: #include int main(int argc, char **argv) { char pc[argc+5]; /* do something useful with pc */ return EXIT_SUCCESS; } 编译错误: 错误C2057:预期的常量表达式 错误C2466:无法分配常量大小为0的数组 错误C2133:’pc’:未知大小