标签: c99

如何将字符串解析为C中的datetime结构?

我想将一个字符串(char*)解析为C中的tm结构.是否有任何内置函数可以做到这一点?

我指的是C99标准中的ANSI C.

c c99

2
推荐指数
2
解决办法
5731
查看次数

我如何知道cl.exe是否应用了c89或c99?

我刚在这篇文章中遇到过这个词,

如何检查编译器实际使用的规则?

或者是否可以为cl.exe?指定规则?

c c99 c89

2
推荐指数
1
解决办法
1657
查看次数

从random()到int的转换结果导致GCC说"警告:隐式函数定义".为什么?

可能重复:
为什么在设置-std = c99时gcc不能找到random()接口?

我是C的新手,所以我进入man stdlib.h,搜索"随机",看到它random()返回了long,因为它只是一个学习练习,以为我只是转换为int(而不是费心去查找一个返回int- rand()是一个).

无论如何,程序编译并正确运行.但:

$ gcc -std=c99 part1.c
part1.c: In function 'main':
part1.c:44:5: warning: implicit declaration of function 'random'
Run Code Online (Sandbox Code Playgroud)

如果我移除-std=99旗帜就会消失.这是"违规"代码:

  int test6[1000];
  for(i = 0; i < 1000; i++)
  {
    test6[i] = (int) random();
    printf("it is %d\n", test6[i]); //check random() is working (it isn't seeded)
  }
  printf("%d\n", largest(test6, 1000));
Run Code Online (Sandbox Code Playgroud)

所以我只是想知道是否有人知道这是为什么,因为我认为这可能很有趣.

c gcc c99 gcc-warning

2
推荐指数
1
解决办法
1646
查看次数

C 标准一致性 - 标识符

我正在寻找关于 C 标准(C99 和/或 C11)部分的一些说明,主要是关于identifiers的使用。
上下文是一个完整的 C99 标准库的实现,我希望它完全符合标准。

基本问题是:C 标准允许我在多大程度上声明标准中未列出的标识符/符号?

例如,让我们考虑isfinite来自math.h.
一个可能的实现可能是:

#define isinf( _x_ )                                                       \
    (                                                                      \
        ( sizeof( _x_ ) == sizeof( float  ) ) ? _c99_math_isinf_f( _x_ ) : \
        ( sizeof( _x_ ) == sizeof( double ) ) ? _c99_math_isinf_d( _x_ ) : \
                                                _c99_math_isinf_l( _x_ )   \
    )

int _c99_math_isinf_f( float x );
int _c99_math_isinf_d( double x );
int _c99_math_isinf_l( long double x );
Run Code Online (Sandbox Code Playgroud)

在这里,我需要声明显然不属于C …

c standards standards-compliance c99 standard-library

2
推荐指数
1
解决办法
239
查看次数

C 中参数数组类型中的“静态”是什么意思?

我看到了以下一些复杂的函数定义。

void foo(double A[static 10]) {
   double B[10];    
}
Run Code Online (Sandbox Code Playgroud)

它是有效的 C 和 C++ 代码吗?它是 C99 或 C++ 标准引入的新语法吗?它的目的是什么?我应该什么时候使用它?这有什么必要?

arrays parameters static function c99

2
推荐指数
1
解决办法
628
查看次数

函数“ execle”错误的隐式声明

我不断

函数“ execle”的隐式声明在C99中无效

编译下面的代码时。我想念什么?

#include <stdio.h>
#include <stdlib.h>

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;
}
Run Code Online (Sandbox Code Playgroud)

c c99

2
推荐指数
1
解决办法
2810
查看次数

如何检查结构成员是否存在于C中?

如何检查我的结构something在 C99 中是否有成员?

#include <stdlib.h>
#include <string.h>

struct some {
  char title[50];
  char name[50];
};

int main() {
  struct some s;

  if (*s.something) { // Error: no member named 'something' in 'struct.some'
    strcpy(s.something, "Hello");
  }
}
Run Code Online (Sandbox Code Playgroud)

更新:

我不需要知道它在编译时是否存在,而是在构建的程序中。成员及其值将从文件中解析,然后在循环中消耗到结构中,但我需要确保它会跳过所有不存在的成员。

c struct c99

2
推荐指数
1
解决办法
7722
查看次数

模拟 GCC 语句表达式

我被迫使用 IAR EW430 编译器 v7.12 用于嵌入式项目,它只正式支持 c99。

我希望能够通过任何方式以通用方式模拟 GCC 的语句表达式,而不是编写一堆专用的内联函数。

有没有办法实现这一目标?(也许使用 MACRO-wizardry?或者模拟 Lambda,或者一些允许这样做的隐藏编译器开关?)显然不是改变编译器。

具体来说,复合表达式的最后一条语句的结果应该同时携带其类型和值,而不是作为宏参数传入的那些。

我已经搜索了几个月,但我能得到的最接近的是令人印象深刻的图书馆,但这似乎是一个非常多的东西。

c lambda closures c99 c-preprocessor

2
推荐指数
1
解决办法
824
查看次数

C scanf() 格式的行为

免责声明。我见过很多问题,包括几乎完全相同的代码片段,但似乎没有人回答这个问题。

对于入门级 CS 课程,我们的任务是制作一个简单的程序,该程序接受用户输入的 ID、姓名和年龄并将其保存到文件中。这很简单,我很快就让它工作了。问题是,为了得到一部分,名称输入,正常工作,我不得不“欺骗”我遇到的问题。
有问题的代码片段。

int id, age;
char name[40]={0};
printf("ID: ");
scanf("%i",&id);
printf("Name: ");
scanf("%*c");
scanf("%[^\n]%*c",name);
printf("Age: ");
scanf("%i",&age);
Run Code Online (Sandbox Code Playgroud)

这工作正常。但是这条线让我很恼火;scanf("%*c");它的唯一目的是处理'\n'潜伏在流中的字符,可能来自先前的输入。出于某种原因,我觉得这是作弊,或者如果我必须使用这种解决方法,我做错了什么。任何提示表示赞赏。

c stdin scanf c99

2
推荐指数
1
解决办法
61
查看次数

阵列重新初始化会导致内存泄漏吗?

我在 SO 上找到了一个答案,建议使用以下解决方案来重新初始化 c 中的数组。

int *foo = (int[]){1,2,3,4,5};
Run Code Online (Sandbox Code Playgroud)

我不确定这样的语法到底会做什么,我有几个问题:

如果我的数组是之前创建的,它会导致内存泄漏吗?

double *my_array = (double[]){1.1, 2.2, 3.3, 4.4, 5.5};

...

my_array = (double[]){-1.1, -2.2, -3.3}; // Do i need to call free(my_array) first?
Run Code Online (Sandbox Code Playgroud)

是否允许在函数调用中使用这种方法?

void foo(int *arr)
{
  arr = (int[]){-2, -7, 1, 255};
}

int main()
{
  int *my_array = (int[]){1, 2, 3};
  foo(my_array);
  
  if (my_array[2] != 1)
    return -1;
}
Run Code Online (Sandbox Code Playgroud)

概括:

  • 这种语法是否只是使用预定义的值在堆中分配新内存并返回指针?
  • 它会自动清除前一个指针中的所有内容吗?

c c99

2
推荐指数
1
解决办法
67
查看次数