Tag: c99

释放全局变量

假设我有一个包含大型结构的全局变量: typedef struct { char Big[1024] } LARGE; static LARGE x; void main() { free(x); } 当我不再需要它时,我可以安全地从main调用free(x)吗?

Visual Studio 2017是否完全支持C99?

最新版本的Visual Studio已经看到了对C99的改进支持。 最新版本VS2017现在支持所有C99吗? 如果没有,C99的哪些function仍然缺失?

隐式声明函数’execle’错误

我一直在 函数’execle’的隐式声明在C99中无效 在编译下面的代码时。 我错过了什么? #include #include char *my_env[] = {“JUICE=PEACH and apple”, NULL}; int main (int argc, char *argv[]) { execle (“diner_info”, “diner_info”, “4”, NULL, my_env); printf (“Diners: %s\n”, argv[1]); printf (“Juice: %s\n”, getenv(“JUICE”)); return 0; }

零(!0)编译器的逻辑否定依赖于C吗?

我遇到一篇文章,其中提到!0的结果与编译器有关。 结果可以是1或FF或FFFF,依此类推。 至于C99标准6.5.3.3一元算术运算符, 逻辑否定运算符的结果! 如果其操作数的值比较不等于0则为0;如果其操作数的值比较等于0则为1.结果的类型为int。 表达式!E等价于(0 == E)。 它真的依赖于编译器吗?

如果没有类型转换,为什么复合文字赋值不起作用

我对C中的文字有疑问。 int a; //a is an integer that is assigned an integer literal 414 a = 414; float b; //b is a float that is assigned a float literal of 3.14 b = 3.14; struct point { int x,y; }; struct point b; //{5,6} is a compound literal that is assigned to a struture. b […]

C99和C ++内联函数的兼容定义

我有一个由C ++ 11应用程序代码使用的C99代码实用程序库。 一些内联函数以C99样式声明,并在转换单元中显式生成代码,如: // buffer.h inline bool has_remaining(void* obj) { … } // buffer.c extern inline bool has_remaining(void * obj); 但是,当我尝试在C ++应用程序中使用has_remaining时,我在链接时遇到有关多个定义的错误。 似乎g ++正在实例化已经存在于库中的内联代码,尽管有extern “C” 标头保护说明符。 有没有办法强制g ++使用这种类型的定义? 看起来如果#ifdef __cplusplus是一个带有gnu_inline属性的extern定义,那么正确的事情就会发生,但是肯定有一种更便携的方式来保持现代C头与现代C ++兼容吗? – 编辑:工作示例 – buffer.h: #ifndef BUFF_H #define BUFF_H #include #include #ifdef __cplusplus extern “C” { #endif inline bool has_remaining(void const* const obj) { […]

在c99中使用clock_gettime时出现编译错误

当我在我的代码片段中使用clock_gettime,并使用标志-std = c99进行编译时,我收到如下错误: warning: implicit declaration of function ‘clock_gettime’ error: ‘CLOCK_REALTIME’ undeclared (first use in this function) 我已经包含了’time.h’文件。 任何人都知道如何解决它。

C99结构指定的初始化程序和其他值

我知道在C99中你可以使用成员名称初始化结构的成员,如下所示: struct myStruct { int i; char c; float f; }; 以下是有效的: struct myStruct m = {.f = 10.11, .i = 5, .c = ‘a’}; 还有人说未初始化的成员将被设置为0 。 所以 struct myStruct m = {.f = 10.11, .c = ‘a’}; 在这里i将被设置为0 但是,对于以下内容: struct myStruct m = {.f = 10.11, .c = ‘a’, 6}; i仍然初始化为0.如果我们进行这样的复合初始化是什么原因。

除了在现代POSIX环境中使用外,我还可以使用什么?

我是C的新手,但写了一个小的multithreading应用程序。 我想对线程引入延迟。 我一直在使用’usleep’并且行为是我想要的 – 但它会在C99中产生警告。 函数’usleep’的隐式声明 这只是一个警告,但它困扰我。 我用谷歌搜索了一个答案,但我能找到的只是一个while循环/定时器方法,看起来像是CPU密集型。 编辑: 我的包括: #include #include #include #include #include 我正在调用编译器: c99 program.c -Wall -pedantic -W -lpthread 编辑#2: 我创建了一个包含以下内容的新文件: #include int main(void) { usleep(10); } 我仍然得到警告。 编辑#3:正如所建议的,我已经更新了问题的文本。

NULL函数指针

调用null函数指针的行为是什么? void (*pFunc)(void) = NULL; pFunc(); 为什么将未使用的函数指针初始化为NULL是可取的?