Questions tagged «c99»

该标签用于有关国际标准ISO 9899:1999(又称“ C99”)和技术勘误的问题,以及有关用C99编写的代码的问题(与K&R C,C89或更高版本的C Standard修订版(例如2011修订版C11相反)) 。


2
实际使用C99'restrict'关键字吗?
我浏览了一些文档和问题/答案,并看到其中提到的内容。我读了一个简短的说明,指出程序员基本上会保证不会使用指针指向其他地方。 谁能提供一些实际的案例,值得使用它吗?
182 c  gcc  c99  restrict-qualifier 

10
GCC的## __ VA_ARGS__技巧的标准替代方法?
C99中可变参数宏的空参数存在一个众所周知的 问题。 例: #define FOO(...) printf(__VA_ARGS__) #define BAR(fmt, ...) printf(fmt, __VA_ARGS__) FOO("this works fine"); BAR("this breaks!"); BAR()根据C99标准,上述的使用确实是不正确的,因为它将扩展为: printf("this breaks!",); 请注意结尾的逗号-不可行。 一些编译器(例如:Visual Studio 2010)将悄悄地为您消除尾随的逗号。其他编译器(例如:GCC)也支持放在##前面__VA_ARGS__,如下所示: #define BAR(fmt, ...) printf(fmt, ##__VA_ARGS__) 但是,是否存在符合标准的方法来实现此行为?也许使用多个宏? 现在,该##版本似乎受到了很好的支持(至少在我的平台上),但是我确实希望使用符合标准的解决方案。 先发制人:我知道我可以编写一个小函数。我正在尝试使用宏进行此操作。 编辑:这是为什么我想使用BAR()的示例(尽管很简单): #define BAR(fmt, ...) printf(fmt "\n", ##__VA_ARGS__) BAR("here is a log message"); BAR("here is a log message with a …


4
布尔到整数的转换
这种转换的可移植性。我可以确定两个断言都通过了吗? int x = 4<5; assert(x==1); x = 4>5; assert(x==0); 不要问为什么。我知道这很丑。谢谢。
130 c++  c  c99 

3
在C89模式下编译时,下面的程序如何输出C89?在C99模式下编译时,下面的程序如何输出?
我从网上找到了这个C程序: #include <stdio.h> int main(){ printf("C%d\n",(int)(90-(-4.5//**/ -4.5))); return 0; } 该程序的有趣之处在于,当它在C89模式下编译并运行时,它会打印,C89而当它在C99模式下编译并运行时,它会打印C99。但我无法弄清楚该程序如何工作。 您能否解释printf上述程序中第二个参数的工作方式?
128 c  printf  comments  c99  c89 

5
C,C99,ANSI C和GNU C有什么区别?
我已经开始在Codechef上进行编程实践,并且对C和C99之间的差异感到困惑。C在这里是什么意思?是C89吗?检查此提交底部的语言。它同时包含C和C99。 我在互联网上发现了一个名为GNU C的东西。Linux / unix系统是否有其他C?这些是否符合ANSI的C标准?我在某些地方也读过“ C99严格”。这是什么? 是否还有其他使用的C标准?是否有所谓的C 4.3.2或当前使用的gcc版本? 编辑: 这,这,这有所帮助。我将搜索更多并编辑未回答的内容。 我不是编程新手。我知道什么是C语言。我知道ANSI有不同的C标准,例如C89,C99和C11。
122 c  gcc  c99  c89  ansi-c 

5
为什么C ++ 11不支持指定的初始化列表作为C99?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引文回答。 2年前关闭。 改善这个问题 考虑: struct Person { int height; int weight; int age; }; int main() { Person p { .age = 18 }; } 上面的代码在C99中合法,但在C ++ 11中不合法。 什么是 C ++ 11 标准委员会排除支持此类方便功能的理由?
121 c++  c  c++11  initialization  c99 


7
C99 stdint.h标头和MS Visual Studio
令我惊讶的是,我刚刚发现MS Visual Studio 2003向上版本中缺少C99 stdint.h。我确定它们是有原因的,但是有人知道我可以在哪里下载副本吗?没有此标头,我将无法定义有用的类型,例如uint32_t等。
113 c++  c  visual-studio  c99 

8
Printf宽度说明符可保持浮点值的精度
是否有一个printf宽度说明符可以应用于浮点说明符,该宽度说明符会自动将输出格式化为必要数量的有效数字,以便在回扫字符串时获取原始的浮点值? 例如,假设我float将a 打印到2小数点后的精度: float foobar = 0.9375; printf("%.2f", foobar); // prints out 0.94 当我扫描输出时0.94,我没有符合标准的保证,即会获得原始的0.9375浮点值(在此示例中,我可能不会)。 我希望有一种方法可以告诉printf您自动将浮点值打印到必要的有效位数,以确保可以将其扫描回传递给的原始值printf。 我可以使用其中的一些宏float.h来导出要传递的最大宽度printf,但是是否已有说明符可以自动打印到必要数量的有效数字 -或至少打印到最大宽度?

12
Visual Studio是否支持新的C / C ++标准?
我一直在阅读有关C99和C ++ 11以及所有这些非常甜美的东西,这些东西已经添加到语言标准中,有一天可能会很好用。但是,我们目前在用Visual Studio编写C ++的领域中感到苦恼。 该标准中的任何新内容是否都会添加到Visual Studio中,或者Microsoft是否对添加新的C#变体更感兴趣? 编辑:除了接受的答案,我发现了Visual C ++团队博客: http://blogs.msdn.com/vcblog/ 具体来说,其中的帖子: https://web.archive.org/web/20190109064523/https://blogs.msdn.microsoft.com/vcblog/2008/02/22/tr1-slide-decks/ 很有用。谢谢!

3
在C99中,没有“静态”或“外部”的“内联”曾经有用吗?
当我尝试构建此代码时 inline void f() {} int main() { f(); } 使用命令行 gcc -std=c99 -o a a.c 我收到一个链接器错误(对的未定义引用f)。如果我使用static inline或extern inline而不是just inline,或者使用进行编译,则该错误消失-O(因此该函数实际上是内联的)。 这种行为似乎在C99标准的6.7.4(6)段中定义: 如果翻译单元中某个函数的所有文件范围声明都包含inline不带的函数说明符extern,则该翻译单元中的定义为内联定义。内联定义不为函数提供外部定义,也不禁止在另一个翻译单元中使用外部定义。内联定义提供了外部定义的替代方法,翻译器可以使用该替代方法在同一翻译单元中实现对该函数的任何调用。未指定对函数的调用是使用内联定义还是使用外部定义。 如果我正确理解了所有这些内容,则具有inline上面示例中定义的功能的编译单元仅在存在相同名称的外部函数的情况下一致地编译,并且我永远不知道自己的函数还是外部函数被调用。 这种行为不是完全愚蠢吗?在inline不使用C99的情况下static或extern在C99中定义功能是否有用?我想念什么吗? 答案摘要 当然,我错过了一些东西,而且行为也不愚蠢。:) 正如Nemo解释的那样,想法是放置函数的定义 inline void f() {} 在头文件中,只有一个声明 extern inline void f(); 在相应的.c文件中。仅extern声明触发外部可见的二进制代码的生成。inline在.c文件中确实没有使用-仅在标头中有用。 正如乔纳森回答中所引用的C99委员会的基本原理所阐明的那样,inline所有内容都与编译器优化有关,该优化要求函数定义在调用现场可见。这只能通过将定义放在标头中来实现,当然,标头中的定义一定不能在每次编译器看到它时都发出代码。但是由于没有强制编译器实际内联函数,因此外部定义必须存在于某处。
96 c  inline  c99 


3
是否有机器,其中sizeof(char)!= 1,或者至少CHAR_BIT> 8?
Наэтотвопросестьответына 堆栈溢出нарусском:Кто-нибудьвстречалвсвоейпрактике的sizeof(焦炭)= 1!? 是否有机器(或编译器)在哪里sizeof(char) != 1? C99标准是否说sizeof(char)在标准合规性实施上必须完全为1?如果有,请给我编号和引用。 更新: 如果我有一台不能寻址字节的机器(CPU)(最小读取为4字节,对齐),但是只有4-s字节(uint32_t),则该机器的编译器可以定义sizeof(char)为4吗? sizeof(char)将为1,但char将具有32位(CHAR_BIT宏) Update2: 但是sizeof结果不是BYTES!它是CHAR的大小。char可以是2个字节,或者(可能是)7位? 更新3: 好的。所有机器都有sizeof(char) == 1。但是什么机器CHAR_BIT > 8呢?
93 c  char  standards  sizeof  c99 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.