如何使用用户输入创建全局变量

时间:2016-03-02 10:30:16

标签: c pthreads global

我希望创建以下内容:

int amount[i];

作为一个全局变量(练习使用线程和互斥体)但变量i是在程序启动时定义的:

./a.out 10

我如何通过main(argv[1])获取值并相应地创建全局?

4 个答案:

答案 0 :(得分:4)

您可以使用全局指针变量,然后根据argv [1]分配内存。

$(".cart_hover").hover(function(){
    $("#header-cart").toggleClass("skip-content","show-content");
});

答案 1 :(得分:1)

您尝试在全球范围内使用可变长度数组。这不会起作用(全局变量需要具有恒定的已知大小,否则编译将很困难)。

恕我直言,你不应该首先使用全球。最好使用局部变量,并通过参数将其传递给需要访问它的程序的函数/部分。

恕我直言,你不应该首先使用VLA。

我选择这样的事情:

int main(int argc, char ** argv) {
  // check arguments, not done here!
  int value = atoi(argv[1]);
  // Check that it's actually usable as a size!
  size_t count;
  if (value >= 0) {
    count = value;
  }
  else {
    // Fires of hell here
    exit(1);
  }
  int * amount = malloc(sizeof(int) * count); // add error check, please!
  // use at will
  free(amount);
  return 0;
}

如果你坚持使用全局变量,那么可以使(常量)指针amount成为全局变量。

另外:当从分离的线程访问数据时,首选使用堆分配的数据而不是使用VLA分配的堆栈,因为当线程尝试访问时,VLA可能已经超出了范围它!

答案 2 :(得分:1)

使用constexpr 关键字将任何非常量变量设为constexpr。它将避免编译器错误,但要注意变量。

例如:

#include<iostream.h>

constexpr int afun()
{
  return(3);
}

enum
{

  TOTAL_NO_OF_PACKETS = afun()                      // You can use for Enum also
};


unsigned packets[afun()]; // Using in Global array

void main()
{
   // **
}

答案 3 :(得分:0)

无法使用用户输入创建全局变量。基本上可以通过在程序代码中定义全局变量来使用全局变量。