我是一名python开发人员。我正在学习C编程语言。我已经涵盖了大部分基础知识,并逐渐转向使用C语言。我有以下问题。
在C中,#ifndef _obj_h
基于我们使用下划线的内容。例如。如果我的头文件是obj.h
,那么我会将其用作_obj_h
。如果我有一个名为my_test_header.h
的头文件怎么办?我会将它用作_my_test_header_h
吗?这里的命名惯例是什么?
C99是否允许及时初始化,例如for( int i = 0 .... )
?我的编译器抛出错误。但在许多书中,它被定义为合法的。
请分享任何优秀资源,以便高级使用C编程,讨论开发策略和语言用法。
答案 0 :(得分:2)
除了通常的烦恼之外:以下划线开头的标识符保留给实现。不要使用它们。此外,预处理器宏通常用ALL_CAPS
编写,以便与正常的标识符,函数等轻松区分。所以写下这样的包含保护:
#ifndef MYHEADER_H
#define MYHEADER_H
/* ... */
#endif
C99是否允许及时初始化,例如for(int i = 0 ....)?我的编译器抛出错误。但在许多书中,它被定义为合法的。
然后告诉编译器使用C99。也许试试-std=c99
,适用于GCC和clang(但clang
不需要它,它默认为C99模式)。
分享任何用于C编程高级用法的好资源,讨论开发策略和用法。
否强>
答案 1 :(得分:1)
根本不要使用前导下划线 - 以下划线开头的标识符由实现保留用于文件范围标识符。人们仍然在他们的代码中做了很多,但他们可能不应该这样做。
标准参考 7.1.3保留标识符:
- 所有以下划线开头的标识符始终保留用作普通和标记名称空间中具有文件范围的标识符。
是的,这是允许的。你的编译器太旧了,或者你没有传递正确的标志来在C99或C11模式下编译。
Stack Overflow的偏离主题。
答案 2 :(得分:0)