标签: c-preprocessor

返回指向宏中某个值的指针?

是否可以编写一个具有类型和值作为其输入参数 ( MACRO(type,value)) 的宏,并返回一个指向保存所提交的value.

该宏的执行方式应类似于以下函数,但采用更通用的方式:

int *val_to_ptr(int val){
    int *r = NULL;
    r = nm_malloc(sizeof(*r));
    *r = val;
    return r;
}
Run Code Online (Sandbox Code Playgroud)

nm_malloc()故障安全 malloc 在哪里?宏的用法应该与此用法兼容:

printf("%d",*MACRO(int,5));
Run Code Online (Sandbox Code Playgroud)

有可能实现吗?

c macros c-preprocessor

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

在 C++ 中定义的最佳实践是什么?

我想知道是否有关于在 C++ 语言中使用 Define 的任何官方建议,确切地说最好在头文件或源文件中定义?
我问这个是为了知道是否有任何官方标准可以遵循,或者只是简单的主观标准......我不需要整套标准,但来源或指南的链接就足够了。


稍后编辑:
对这一事实的解释是什么?constconstexpr已成为现状,我指的是用作define避免重复键入的手段,在我看来很清楚,程序员应该充分利用 c++ oop 编译器的潜力。另一方面,如果它如此令人恐惧,为什么不完全删除它呢?我的意思是,据我了解,define它仅用于条件编译,特别是使相同的代码在不同的编译器上工作。
其次,小问题,潜在的错误也是java没有真正的C风格的主要原因define

c++ standards c-preprocessor

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

将变量 args 从宏传递到需要 va_list 的函数

#define exampleA(buf, args...) \
        exampleB(buf, ##args); \
    }

#endif
Run Code Online (Sandbox Code Playgroud)

在 exampleB 函数声明为 exampleB(char* buf, ...) 的情况下工作。但我需要将声明更改为 exampleB(char* buf, va_​​list args)。如何相应地更改宏?

c variadic-functions c-preprocessor

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

C++ 取消定义宏无法按预期工作

我有两个程序来测试 的工作 #undef,但它没有按预期工作。

测试1.cpp

#include<iostream>

#define AB 1

void display(){
#ifdef AB
std::cout<<"yes"<<std::endl;
#endif
}

int main(){
display();
#undef AB
display();
}
Run Code Online (Sandbox Code Playgroud)

输出: yes yes

测试2.cpp

#include<iostream>

#define AB 1

int main(){
#ifdef AB
std::cout<<"yes\n";
#endif

#undef AB

#ifdef AB
std::cout<<"yes\n";
#else
std::cout<<"no\n";
#endif
}
Run Code Online (Sandbox Code Playgroud)

输出 : yes no

即使两个程序的逻辑相同,为什么输出也会有所不同?定义和取消定义宏线程安全吗?

c++ macos c-preprocessor

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

在预处理器指令中使用比较运算符 C++

我想根据常量值定义一些函数:

#define mode 5

#if mode & 2 != 0
  // function 1
#endif

#if mode & 4 != 0
  // function 2
#endif
Run Code Online (Sandbox Code Playgroud)

这听起来和看起来都很奇怪,但我想使用一个常量来定义和激活一些程序模块。
定义mode = 2包括功能1、mode = 4包括功能2并且mode = 6包括两个功能。有一个问题:像、、或 这样
的比较运算符似乎在指令中不起作用,并且语句总是被执行。==!=><#if

我究竟做错了什么?我是否想做一件愚蠢或不可能的事情?

c++ directive arduino comparison-operators c-preprocessor

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

在 C 和 C++ 中,你怎么称呼“#”?

我只是好奇,你#在 C/C++ 中叫什么?

例如,#if。它被称为“hashtag if”吗?

c c++ c-preprocessor

0
推荐指数
2
解决办法
184
查看次数

找不到 main()。为什么这个程序打印“你好”?

#include<stdio.h>

#define begin(m,a,i,n) m##a##i##n
#define start begin(m,a,i,n)

void start() {
   printf("Hello");
}
Run Code Online (Sandbox Code Playgroud)

是的,是的,我确实看到了这些字母,m a i n但是它们是如何组合在一起并起作用的?

调试器...似乎对这个程序没有帮助。

c preprocessor c-preprocessor

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

为什么 #define SOMETHING TRUE 对 #if 不起作用?

以下代码打印main.cpp:20:19: note: #pragma message: serial disabled. 我原以为会打印出“enabled”。代码有什么问题吗?

int main()
{
#define SERIAL_ENABLED TRUE

#if SERIAL_ENABLED
  #pragma message "serial enabled"
#else
  #pragma message "serial disabled"
#endif

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ c-preprocessor

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

比较 C 中两个未定义的符号

我没有定义符号 SYMBOL1 和 SYMBOL2,当我看到以下代码中调用 printf 时,我感到很惊讶:

#include <stdio.h> 
int main()
{
#if (SYMBOL1==SYMBOL2)
    printf("Hello World");
#endif
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

您能解释一下原因吗?有什么参考标准吗?

c c-preprocessor

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

在预处理器指令中使用除 # 以外的其他字符

有没有办法在定义预处理器指令时使用另一个字符#?例子:

代替:

#if 1
foo
#endif
Run Code Online (Sandbox Code Playgroud)

使用?,例如:

?if 1
foo
?endif
Run Code Online (Sandbox Code Playgroud)

c gcc c-preprocessor

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