为什么GCC中的C预处理器将单词linux
(小写字母)解释为常量1
?
test.c的:
#include <stdio.h>
int main(void)
{
int linux = 5;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
结果$ gcc -E test.c
(预处理阶段后停止):
....
int main(void)
{
int 1 = 5;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
哪个 - 当然 - 会产生错误.
(顺便说一句:#define linux
stdio.h文件中没有.)
想象一下两个正整数A和B.我想将这两个整数组合成一个整数C.
可能没有其他整数D和E组合为C.因此将它们与加法运算符组合不起作用.例如30 + 10 = 40 = 40 + 0 = 39 + 1连接也不起作用.例如"31"+"2"= 312 ="3"+"12"
这种组合操作也应该是确定性的(总是在相同的输入下产生相同的结果)并且应该总是在整数的正侧或负侧产生整数.
在errno.h
,这个变量被声明为extern int errno;
我的问题是,errno
在一些调用之后检查值是否安全或在多线程代码中使用perror()是否安全.这是一个线程安全变量吗?如果没有,那么替代方案是什么?
我在x86架构上使用linux和gcc.
在Windows环境中,有一个API来获取正在运行进程的路径.在Unix/Linux中有类似的东西吗?
或者在这些环境中还有其他方法吗?
有人可以建议今天这些图书馆的最佳用途是什么吗?它只是GUI,还是有数据库,XML,网络,线程等支持?
我正在阅读他们,并考虑开始学习/使用其中一个.
什么是最常见的?他们之间有什么区别?你为什么选择一个而不是另一个?
是否有工具或网站可以帮助我使用拖放操作为Android应用程序创建UI?
我找到了这个网站,但想知道是否有更稳定的工具或网站?
我尝试编译此代码时遇到此结构构造函数的问题:
typedef struct Node
{
Node( int data ) //
{
this->data = data;
previous = NULL; // Compiler indicates here
next = NULL;
}
int data;
Node* previous;
Node* next;
} NODE;
Run Code Online (Sandbox Code Playgroud)
当我来这个错误发生时:
\linkedlist\linkedlist.h||In constructor `Node::Node(int)':|
\linkedlist\linkedlist.h|9|error: `NULL' was not declared in this scope|
||=== Build finished: 1 errors, 0 warnings ===|
Run Code Online (Sandbox Code Playgroud)
最后一个问题是结构,但它在我的main.cpp中运行正常,这次是在头文件中并且给我这个问题.我正在使用Code :: Blocks来编译此代码
像这样:
if (fcntl(fd, F_SETFD, FD_CLOEXEC) == -1) {
...
Run Code Online (Sandbox Code Playgroud)
虽然我读过man fcntl
,但我无法弄清楚它的作用.
如何将多行连接到一行,使用分隔符表示换行符,并避免使用尾随分隔符,并可选择忽略空行?
例.考虑一个文本文件foo.txt
,有三行:
foo
bar
baz
Run Code Online (Sandbox Code Playgroud)
所需的输出是:
foo,bar,baz
Run Code Online (Sandbox Code Playgroud)
我现在使用的命令:
tr '\n' ',' <foo.txt |sed 's/,$//g'
Run Code Online (Sandbox Code Playgroud)
理想情况下它会是这样的:
cat foo.txt |join ,
Run Code Online (Sandbox Code Playgroud)
什么是:
当然我可以写一些东西,或者只是使用别名.但我很想知道这些选择.