小编kol*_*ewb的帖子

C中函数和变量的内存分配

依赖于C编译器和编译器标志的版本,可以在函数中的任何位置初始化变量(据我所知).

我习惯将所有变量放在函数的顶部,但讨论开始时关于变量的内存使用,如果在函数的任何其他位置定义的话.

下面我写了两个简短的例子,我想知道是否有人能解释我(或验证)如何分配内存.

示例1:变量y是在可能的返回语句之后定义的,有可能这个变量不会被用于这个原因,据我所知这没关系,代码(内存分配)将是如果变量放在函数的顶部,则相同.它是否正确?

示例2:变量x在循环中初始化,这意味着此变量的范围仅在此循环内,但此变量的内存使用情况如何?如果放在功能的顶部会有什么不同吗?或者只是在函数调用的堆栈上初始化?

编辑:总结一个主要问题:减少变量的范围或更改第一次使用的位置(所以在其他任何地方而不是顶部)对内存使用有影响吗?

代码示例1

static void Function(void){
 uint8_t x = 0;

 //code changing x
 if(x == 2)
 {
  return;
 }

 uint8_t y  = 0;    
 //more code changing y
}
Run Code Online (Sandbox Code Playgroud)

代码示例2

static void LoopFunction(void){
 uint8_t i = 0;

 for(i =0; i < 100; i ++)
 {
  uint8_t x = i;
  // do some calculations
  uartTxLine("%d", x); 
 }

 //more code
}
Run Code Online (Sandbox Code Playgroud)

c memory embedded stack

3
推荐指数
1
解决办法
648
查看次数

在C中处理动态函数参数

在编写这个项目时,我遇到了一个需要能够同时处理uint8_t,uint16_t和uint32_t变量的函数的情况.

我试图找到一个合适的解决方案,以保持这种动态,而不会造成太多的混乱或大量的重复代码,但最重要的是,有一个保存解决方案.

在当前代码中,我使用带有union作为函数参数的结构:

typedef struct
{
  DataType type;
  union
  {
    uint8_t uint8;
    uint16_t uint16;
    uint32_t uint32;
  } unsignedInt;
} anySizeUnsignedType;
Run Code Online (Sandbox Code Playgroud)

这是尝试使函数更加动态,但是,我的函数中有2个这样的类型,需要根据第三个变量进行比较.

所以,这基本上就是我要做的事情:

anySizeUnsignedType Var1 = arg1;
anySizeUnsignedType Var2 = arg2;
uint8_t comparison = arg3;

switch (comparison)
{

    case ABOVE:

      if (Var1 > Var2 )
      {
        retValue = TRUE;
      }    
      break;

    case EQUAL:

      if (Var1 > (Var2 - AnotherVar)
          && (Var1  < (Var2 + AnotherVar)))

      {
        retValue = TRUE;
      }    
      break;

    case BELOW:
      if (Var1 < Var2 )
      {
        retValue = …
Run Code Online (Sandbox Code Playgroud)

c embedded arm

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

批量检查空用户输入

我正在努力进行简单的检查,如果用户输入只是空(Enter),并且如果将变量设置为新值...花费一个小时但它不起作用.目标是让输入的值以反斜杠开头,如果没有输入,则只是一个空字符串.

码:

SET myTargetServerInstanceName=anyNOPEdummyValue
SET /P myTargetServerInstanceName=Enter Target Server INSTANCE Name:    
IF %myTargetServerInstanceName%==anyNOPEdummyValue SET myTargetServerInstanceName=
IF NOT %myTargetServerInstanceName% == [] SET myTargetServerInstanceName=\%myTargetServerInstanceName%
Run Code Online (Sandbox Code Playgroud)

这会导致错误:

SET此时出人意料.

string variables if-statement batch-file

0
推荐指数
1
解决办法
9223
查看次数

标签 统计

c ×2

embedded ×2

arm ×1

batch-file ×1

if-statement ×1

memory ×1

stack ×1

string ×1

variables ×1