18得票7回答
C99有哪些功能被认为是有害或不支持的?

我通常在C89中编写C代码,现在C99的一些功能(如intxx_t或__VA_ARGS__或snprintf)非常有用,甚至可能是至关重要的。 在将我的要求从C89转移到C99之前,我想知道哪些C99功能被广泛支持,哪些不被广泛支持甚至被认为是有害的。 我知道我们可以检查目标编译器的支持情...

17得票4回答
C89/C90、C99和C11的兼容性

我刚刚阅读了C维基百科条目,据我所知,有三个不同的C版本广泛使用:C89、C99和C11。我的问题涉及到不同版本源代码的兼容性。 假设我要编写一个程序(使用最新版本的C11),并且导入一个使用C89编写的库。按照C11规范编译所有文件时,这两个版本是否会正常工作? 问题1: 较新的C版本,如...

17得票2回答
为什么 ANSI 只指定外部标识符中最小的有效字符数为六个?(涉及 IT 技术)

我有一个问题,涉及第一份《美国国家标准编程语言-C》(也称ANSI/ISO 9899-1990、ISO/IEC 9899.1990 (E)、C89等)中第5.2.4.1节“翻译限制”。简单来说,这是第一个ANSI C标准。该标准说了什么令人感到奇怪?它声名狼藉地指出,符合C标准的编译器只需要处...

17得票2回答
使用联合体在两个具有共同初始序列的结构体之间进行转换是否是合法且定义良好的行为(见示例)?

我有一个API,其中包含一个公共结构A和一个内部结构B,并且需要能够将结构B转换为结构A。以下代码是否在C99(和VS 2010/C89)和C++03/C++11中合法且具有良好定义的行为?如果是,请解释什么使它具有良好的定义。如果不是,则转换这两个结构之间最有效和跨平台的方法是什么?stru...

17得票3回答
printf是否需要使用%zu格式说明符?

我们在一个嵌入式平台上使用C89。我试图打印出size_t,但它没有起作用: 我们在嵌入式平台上使用C89。我尝试打印一个size_t,但无法运行:#include <stdio.h> int main(void) { size_t n = 123; print...

16得票3回答
在C语言中,“int”是否真的需要至少与“short”一样大?

我在不同的来源中(例如维基百科:http://en.wikipedia.org/wiki/C_variable_types_and_declarations#Size)多次看到:在C语言中,long long不比long类型小,而long类型也不比int类型小,int类型也不比short类型小...

16得票2回答
ANSI C(ISO C90):scanf能读取/接受无符号字符吗?

简单的问题:在ANSI C中,scanf能否将"小整数"读入到无符号字符(unsigned char)中? 示例代码 un_char.c:#include <stdio.h> #include <stdlib.h> int main(void) { unsi...

16得票3回答
将int指针转换为char指针,反之亦然

问题很简单。据我所知,在32位环境中,GCC认为char将按字节对齐,int将按4字节对齐。我也知道C99标准6.3.2.3规定,指针类型之间的强制转换导致未定义的操作。其他C标准对此有什么说法?这里还有许多经验丰富的编程人员——任何观点都将不胜感激。int *iptr1, *iptr2; c...

16得票4回答
在C语言中,返回va_list是否安全?

我想编写一个返回类型为va_list的函数。 例如:va_list MyFunc(va_list args); 这种写法是否安全且可移植?

16得票6回答
C语言中哪些部分最具可移植性?

我最近读到一篇关于Lua联合创始人Luiz H. de Figueredo和Roberto Ierusalimschy的访谈,他们在讨论Lua的设计和实现。这令我感到非常有趣。然而,讨论中的一部分让我想到了一些问题。Roberto将Lua称为“独立应用程序”(也就是说,它是纯ANSI C,不使...