是否可以编写一个具有类型和值作为其输入参数 ( 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++ 语言中使用 Define 的任何官方建议,确切地说最好在头文件或源文件中定义?
我问这个是为了知道是否有任何官方标准可以遵循,或者只是简单的主观标准......我不需要整套标准,但来源或指南的链接就足够了。
稍后编辑:
对这一事实的解释是什么?const和constexpr已成为现状,我指的是用作define避免重复键入的手段,在我看来很清楚,程序员应该充分利用 c++ oop 编译器的潜力。另一方面,如果它如此令人恐惧,为什么不完全删除它呢?我的意思是,据我了解,define它仅用于条件编译,特别是使相同的代码在不同的编译器上工作。
其次,小问题,潜在的错误也是java没有真正的C风格的主要原因define?
#define exampleA(buf, args...) \
exampleB(buf, ##args); \
}
#endif
Run Code Online (Sandbox Code Playgroud)
在 exampleB 函数声明为 exampleB(char* buf, ...) 的情况下工作。但我需要将声明更改为 exampleB(char* buf, va_list args)。如何相应地更改宏?
我有两个程序来测试 的工作 #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
即使两个程序的逻辑相同,为什么输出也会有所不同?定义和取消定义宏线程安全吗?
我想根据常量值定义一些函数:
#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/C++ 中叫什么?
例如,#if。它被称为“hashtag if”吗?
#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但是它们是如何组合在一起并起作用的?
调试器...似乎对这个程序没有帮助。
以下代码打印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) 我没有定义符号 SYMBOL1 和 SYMBOL2,当我看到以下代码中调用 printf 时,我感到很惊讶:
#include <stdio.h>
int main()
{
#if (SYMBOL1==SYMBOL2)
printf("Hello World");
#endif
return 0;
}
Run Code Online (Sandbox Code Playgroud)
您能解释一下原因吗?有什么参考标准吗?
有没有办法在定义预处理器指令时使用另一个字符#?例子:
代替:
#if 1
foo
#endif
Run Code Online (Sandbox Code Playgroud)
使用?,例如:
?if 1
foo
?endif
Run Code Online (Sandbox Code Playgroud) c-preprocessor ×10
c ×6
c++ ×5
arduino ×1
directive ×1
gcc ×1
macos ×1
macros ×1
preprocessor ×1
standards ×1