相关疑难解决方法(0)

为什么编译器会抱怨这个宏声明

为了调试方便,我编写了以下宏

1 #ifndef DEF_H
2 #define DEF_H
3 #define DEBUG_MODE
4 #define DEBUG_INFO(message)     \
5         #ifdef DEBUG_MODE       \
6                 cout << message << endl; \
7         #endif                          \
8 #endif
Run Code Online (Sandbox Code Playgroud)

但gcc抱怨如下

def.h:4: error: '#' is not followed by a macro parameter
def.h:1: error: unterminated #ifndef
Run Code Online (Sandbox Code Playgroud)

这段代码有什么问题?我在这里错过了一些重点吗?

c debugging c-preprocessor

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

通过OpenMP SIMD进行256位向量化可以防止编译器的优化(比如函数内联)?

考虑以下玩具示例,其中A是以n x 2列主要顺序存储的矩阵,我想计算其列总和.sum_0仅计算第1列的总和,同时sum_1也计算第2列的总和.这实际上是一个人为的例子,因为基本上不需要为这个任务定义两个函数(我可以编写一个带有双循环嵌套的函数,其中外循环从中迭代0j).它的构建是为了演示我现实中的模板问题.

/* "test.c" */
#include <stdlib.h>

// j can be 0 or 1
static inline void sum_template (size_t j, size_t n, double *A, double *c) {

  if (n == 0) return;
  size_t i;
  double *a = A, *b = A + n;
  double c0 = 0.0, c1 = 0.0;

  #pragma omp simd reduction (+: c0, c1) aligned (a, b: 32)
  for (i = 0; i < …
Run Code Online (Sandbox Code Playgroud)

c gcc simd openmp auto-vectorization

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

是否可以在宏中定义宏?

我想使用这样的宏参数:

  #define D(cond,...) do{         \
    #if cond                      \
    #define YYY 1                 \
    #else                         \
    #define YYY 0                 \
  } while(0)
Run Code Online (Sandbox Code Playgroud)

是否可以?

UPD
也许当源将被预处理两次时:gcc -E source.c | gcc -xc -下一步将起作用:

#define D(cond,...) #define YYY cond&DEBUG
#if YYY
#define D(...) printf( __VA_ARGS__ )
#else
#define D(...)
#endif
Run Code Online (Sandbox Code Playgroud)

c macros

4
推荐指数
3
解决办法
5190
查看次数

标签 统计

c ×3

auto-vectorization ×1

c-preprocessor ×1

debugging ×1

gcc ×1

macros ×1

openmp ×1

simd ×1