我试图强制我的编译std::cout器用我的代码替换我的代码中的任何出现.但是当我写这样的东西时:
#define std::cout (*some code*)
我的编译器吐在我的脸上.有没有办法做到这一点 ?
编辑:
这是代码片段:
# define std::cout (std_out << std::cout)
(std_out是我之前打开的文件)
和std :: out出现的行上的错误
全球范围没有"cout"
我使用Arduino Uno(16位int)和:
#define DT 49
#define DT_MICRO ((DT) * 1000)
...
while (val<DT_MICRO){/*something*/}
Run Code Online (Sandbox Code Playgroud)
哪个给
49
-16536
Run Code Online (Sandbox Code Playgroud)
如果我使用打印它们Serial.print(DT);。为什么?我期望49000。为什么会有一个负数?如果在代码中使用,也会发生同样的情况Serial.print(DT*1000)。
使用
DT 49L
and DT_MICRO (DT*1000L)
Run Code Online (Sandbox Code Playgroud)
像预期的那样工作。感谢您的澄清。
我正在做C编程的入门课程,我们刚刚开始定义宏.如果cond为false,我应该定义打印msg(字符串)的宏CHECK,但是,它不会将msg打印到stdout流,无论cond是true还是false.有任何想法吗?
1 #define CHECK(cond, msg) if(!cond) fprintf(stdout, "%s", msg)
Run Code Online (Sandbox Code Playgroud) 我正在尝试执行以下代码:
#define channel1 10
#define channel(id) channel##id
int main(){
int id = 1;
cout << channel(id)<<"\n";
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
error: use of undeclared identifier 'channelid'
相反,我希望输出为10,channel(id)应该预处理,channel1并用10替换值.
有没有办法实现它?
#define MIN (A,B) ((A)<(B)?(A):(B)) 要么 #define MIN (A,B) ((A < B)? A : B )
请选择一个答案,为什么?
我想为我的编程语言创建一个面向对象的预处理器,将我的语言转换为C语言(如早期的C++).我想用结构模拟类.问题是:如何在结构中声明一个变量,如下所示:
typedef struct { //equivalent of class
int a = 5;
int (*sub)(int) = &int_sub; //function of a class, uses an external declared function
} class_name;
Run Code Online (Sandbox Code Playgroud)
我尝试了上面的代码,但编译器写了这个:
error: expected ‘:’, ‘,’, ‘;’, ‘}’ or ‘__attribute__’ before ‘=’ token
void (*sub)(int) = &int_sub;
Run Code Online (Sandbox Code Playgroud)
我有两个问题:
我可以在结构中声明一个变量吗?
如果有,怎么样?
我已经看到.c程序执行正常但没有包含头文件,虽然它会抛出警告,但是对于.cpp扩展名,不包含头文件会引发错误.有人可以解释内部行为吗?
#include<stdio.h>
#define SQUARE(x) x*x
int main(){
float s=10,u=30,t=2,a;
a=2*(s-u*t)/SQUARE(t); // How is this evaluated ?
printf("Result %f\n",a);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编译器显示的输出为-100.000000.但据我说它应该是-25.000000.我该怎么做才能纠正它,我的错误是什么?
似乎有时与 ## 连接确实有效,有时则不起作用。
尽管它对于某些用途显然是至关重要的,但它是一个不可靠的功能。
使用##有一套明确的规则吗?
一个例子是:
file1.h
#define concat(a,b) a##b
#define BAR bar
extern int concat(fu,BAR) ();
Run Code Online (Sandbox Code Playgroud)
这里 concat 产生 fuBAR 而不是 fubar。
一个例子是:
file2.h
#define BAR bar
extern int fu##BAR ();
Run Code Online (Sandbox Code Playgroud)
这里 ## 会产生一个关于代码中杂散 ## 的错误。
我在许多地方看到我们正在验证这样的陈述
# if defined(DATA ) || defined(__hpux) || defined(__sun)
Run Code Online (Sandbox Code Playgroud)
我的疑问是:只有define喜欢#defined DATA和检查条件的含义是什么?
我期待以下程序的答案为400 ......但为什么它是120?
#include<stdio.h>
#define N 10+10
int main()
{
int a = N*N;
printf("%d", a);
}
Run Code Online (Sandbox Code Playgroud)