多行宏导致“预期的声明”错误

时间:2019-07-25 16:55:17

标签: c++ visual-c++

我正在尝试使用CUDA C进行GPU计算,尤其是矩阵求逆问题。同时,在我的代码开头,我定义了函数。但是,这似乎使我在执行“ do”的那一行出现了“预期的通货膨胀”错误。

我是C ++的新手,所以没有做太多尝试。

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

#define cudacall(call)
    do
    {
        cudaError_t err = (call);
        if (cudaSuccess != err)
        {
            fprintf(stderr, "CUDA Error:\nFile = %s\nLine = %d\nReason = %s\n", __FILE__, __LINE__, cudaGetErrorString(err));
            cudaDeviceReset();
            exit(EXIT_FAILURE)
        }
    }
    while (0);

“预期宣言”

1 个答案:

答案 0 :(得分:0)

多行宏需要使用MyActivity#onCreate来指示它们在下一行继续。我把所有的人排在最后。滚动查看它们。

\

通常,请尽量避免使用宏。改用lambda和高阶函数:

#define cudacall(call)                                                         \
  do {                                                                         \
    cudaError_t err = (call);                                                  \
    if (cudaSuccess != err) {                                                  \
      fprintf(stderr, "CUDA Error:\nFile = %s\nLine = %d\nReason = %s\n",      \
              __FILE__, __LINE__, cudaGetErrorString(err));                    \
      cudaDeviceReset();                                                       \
      exit(EXIT_FAILURE)                                                       \
    }                                                                          \
  } while (0);

我们可以这样使用它:

template<class F> 
void cudacall(F&& func) {                                                                    
    cudaError_t err = func();                                                  
    if (cudaSuccess != err) {                                                  
        fprintf(stderr, "CUDA Error:\nFile = %s\nLine = %d\nReason = %s\n",      
              __FILE__, __LINE__, cudaGetErrorString(err));                    
        cudaDeviceReset();                                                       
        exit(EXIT_FAILURE);                                                     
    }                                                                          
}