Tag: ansi

ansi C是否限制程序中的外部变量数量?

外部变量我指的是用extern修饰符声明的变量(并在程序的其他地方定义)。 我被告知这个限制,无法在网上找到确认或反驳。 这是真的? 如果是这样,这是限制吗? 它通常是由编译器强制执行的吗?

将stdout重定向到没有ANSI警告的文件

我一直试图让程序的STDOUT重定向到文件。 到目前为止,此代码运行良好: FILE *output = fopen(“output”,”w”); if (dup2(fileno(output),1) == -1) { /* An error occured. */ exit(EXIT_FAILURE); } 问题是,我试图坚持使用ANSI C,而fileno不是ANSI。 当我使用gcc编译时,我收到警告: gcc -Wall -ansi -pedantic warning: implicit declaration of function ‘fileno’ 有没有办法将STDOUT重定向到ansi C中的文件?

C中的非ASCII字符

我正在查看谷歌go的运行时源代码(在https://go.googlecode.com/hg/src/pkg/runtime/ ),似乎他们使用特殊字符作为其function名称,·。 (例如, 请访问https://go.googlecode.com/hg/src/pkg/runtime/cgocall.c )。 这是否被主要编译器接受? 它不是ANSI C,是吗? 或者它只是一些宏观魔法? 谢谢!

结构指针兼容性

假设我们有两个结构: typedef struct Struct1 { short a_short; int id; } Struct1; typedef struct Struct2 { short a_short; int id; short another_short; } Struct2; 从Struct2 *为Struct1 *是否安全? ANSI规范对此有何看法? 我知道有些编译器可以选择重新排序结构字段以优化内存使用,这可能会使两个结构不兼容。 有没有办法确定这段代码是否有效,无论编译器标志如何? 谢谢!

符合ANSI C的实现是否可以在其标准库中包含其他function?

是否符合ANSI C标准的实现允许在其标准库中包含其他类型和function,除了标准列举的那些之外? (理想的答案将参考ANSI标准的相关部分。) 我特别要求,因为Mac OS 10.7在stdio.h中声明了getline函数,即使使用-ansi标志使用gcc或clang进行编译也是如此。 这打破了几个定义自己的getline函数的旧程序。 这是Mac OS 10.7的错吗? (Mac OS 10.7上getline的手册页说getline符合2008年推出的POSIX.1标准。) 编辑:为了澄清,我发现奇怪的是,在Mac OS 10.7上的ANSI C89程序中包含stdio.h也会getline函数的声明,因为getline不是K&R中枚举的函数之一(可能是ANSI) stdio.h的描述。 特别是,尝试编译noweb : gcc -ansi -pedantic -c -o notangle.o notangle.c In file included from notangle.nw:28: getline.h:4: error: conflicting types for ‘getline’ /usr/include/stdio.h:449: error: previous declaration of ‘getline’ was here 它是否是Mac OS 10.7中的一个错误,即使在编译ANSI C89标准时也包含stdio.h中的getline声明?