小编use*_*675的帖子

编译器如何知道函数调用中的逗号不是逗号运算符?

考虑函数调用(调用int sum(int, int))

printf("%d", sum(a,b));
Run Code Online (Sandbox Code Playgroud)

编译器如何确定,函数调用中使用的函数sum(int, int)不是逗号运算符?

注意:我不想在函数调用中实际使用逗号运算符.我只是想知道编译器如何知道它不是逗号运算符.

c compiler-construction function comma-operator

37
推荐指数
5
解决办法
2830
查看次数

对有趣的printf()语句感到困惑

通过阅读此代码,我偶然发现了以下printf()声明:

// reset, hide cursor and clear screen
printf("\e[0m\e[?25l\e[2J");
Run Code Online (Sandbox Code Playgroud)

我必须承认,我不是一名完全合格的C黑客,并且不完全理解这一点.我调整了一下,删除了论点,我理解它的作用(好吧,评论实际上说的都是这样),但我不知道它是如何完成的.此外,这是一个很难谷歌的东西.

这个printf()电话怎么样?

c printf

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

如何从scanf获取换行符,即使它是唯一的输入

我正在做作业,要求我读取一个n表示循环大小的整数,然后读取一行字符n次,并在用户输入后立即打印.所以我使用scanf然后我用它打印printf.问题是,如果用户的输入只是一个换行符,它应该打印另一个\n,但scanf似乎忽略输入的单个\n.

有没有办法让这个任务scanf或我应该尝试别的吗?

int i;
scanf("%d", &i);
for(int ct=0; ct<i; ct++)
{
    char buff[28];
    scanf("%s", buff); // if I just press enter here
    prtinf("%s\n", buff); // then I must get \n\n here
}
Run Code Online (Sandbox Code Playgroud)

c scanf

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

睡觉理发师算法(有多个理发师)

睡理发问题是一个经典的同步问题,很多人可能很熟悉,或者至少听说过.

它基于这样一个前提:当等候室(信号量)中没有客户(每个客户都是线程)时,理发师(线程)会睡觉.如果有人,他会削减他的头发(象征着一些处理)并且顾客离开.如果,等候室里没有人,那么理发师会去睡觉.当另一位顾客到达时,他必须叫醒理发师.


我使用以下基本思想实现了这一点

(虽然实际代码是在C,但为了解决问题,我编写了下面的伪代码而没有太多关心语法,只使用sem_waitsem_post1来更顺畅地阅读)

Semaphore Customers = 0;
Semaphore Barber = 0;
Mutex accessSeats = 1;
int NumberOfFreeSeats = N; 

Barber {
    while(1) {
        sem_wait(Customers); // waits for a customer (sleeps)
        sem_wait(accessSeats); // mutex to protect the number of available seats
        NumberOfFreeSeats++; // a chair gets free
        sem_post(Barber); // bring customer for haircut
        sem_post(accessSeats); // release the mutex on the chair
        // barber …
Run Code Online (Sandbox Code Playgroud)

algorithm multithreading

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

是否有可能将此for循环并行化?

我得到了一些使用OpenMP进行并行化的代码,并且在各种函数调用中,我注意到这个for循环对计算时间有一些好的负罪感.

  double U[n][n];
  double L[n][n];
  double Aprime[n][n];
  for(i=0; i<n; i++) {
    for(j=0; j<n; j++) {
      if (j <= i) {
          double s;
          s=0;
          for(k=0; k<j; k++) {
            s += L[j][k] * U[k][i];
          } 
          U[j][i] = Aprime[j][i] - s;
      } else if (j >= i) {
          double s;
          s=0;
          for(k=0; k<i; k++) {
            s += L[j][k] * U[k][i];
          }
          L[j][i] = (Aprime[j][i] - s) / U[i][i];
      }
    }
Run Code Online (Sandbox Code Playgroud)

然而,在尝试并行化并在这里和那里应用一些信号量之后(没有运气),我开始认识到else if条件对早期的强烈依赖if(L[j][i]是一个处理过的数字U[i][i],可能在早期设置if …

c c++ parallel-processing openmp

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

这条线如何打印阵列?

今天我在阅读一些代码时,偶然发现了这样的事情:

int v[5] = {1, 13, 17, 20, 16};
for_each(begin(v), end(v), [](int n){ cout << n << endl; });
Run Code Online (Sandbox Code Playgroud)

我有点理解发生了什么.它使用std :: for_each函数打印数组v []的所有值.但是处理的是[](int n){ cout << n << endl; }什么?

c++ lambda c++11

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

对嵌套对象文字属性感到困惑

当我在阅读Conway的生命游戏的一些Javascript源代码(这里)时,我偶然发现了一些我以前从未见过的东西(好吧,我在三周前开始使用Javascript.为了上下文,我是来自C++背景,我正在使用专业JavaScript for Web Developers作为尝试理解JS的指南)

这是情况(小提琴):

var Obj = {
    canvas: {
        context : null,
        init : function() {
            this.canvas = document.getElementById('canvas');
            this.canvas.width = 50;
            this.context = this.canvas.getContext('2d');
            /* ... */
        }
    }
}

Obj.canvas.init();
Run Code Online (Sandbox Code Playgroud)

我确实理解这是一个具有嵌套对象文字属性的对象文字.我不明白的是这 this.canvas = document.getElementById('canvas');部分.我以为我需要声明一个变量,例如context上面声明的变量,以获取canvas元素.

这显然有效,正如小提琴上所述,然而,发生了什么?更确切地说,通过使canvas成为HTML元素对象,为什么我不会丢失所有其他属性,例如context

javascript canvas

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

静态函数返回类的静态实例 - 实例应该不一样吗?

我有以下代码:

#include <iostream>
using namespace std;

class Test {
public:
  static Test& get() {
    static Test testSing;
    return testSing;
  }
};

int main() {
  Test a = Test::get();
  Test b = Test::get();

  cout << &a << endl;
  cout << &b << endl;
}
Run Code Online (Sandbox Code Playgroud)

我认为a并且b应该有相同的地址,因为我认为它们应该只构造一次.但是,我在此测试中获得了不同的memmory地址.

我缺少一些微不足道的东西吗?他们不应该有相同的地址吗?

c++ static-methods

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