以下代码:
#include <stdio.h>
inline int myfunc (int x) {
return x+3;
}
int main () {
printf("%d", myfunc(2));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我使用-std=gnu99标志时不编译(我正在用gcc编译).这是它抛出的错误:
gcc -std=gnu99 -c main.c -o main.o
gcc -std=gnu99 main.o -o main
main.o: In function `main':
main.c:(.text+0x15): undefined reference to `myfunc'
collect2: ld returned 1 exit status
make: *** [main] Error 1
Run Code Online (Sandbox Code Playgroud)
-std=gnu99省略时编译没有问题.有谁知道链接器为什么会抱怨-std=gnu99使用?
我的编译器(gcc)在声明的行上抛出警告(而不是错误!)fp:
int fd = open("filename.dat", O_RDONLY);
FILE* fp = fdopen(fd, "r"); // get a file pointer fp from the file descriptor fd
Run Code Online (Sandbox Code Playgroud)
这些是警告:
main.c: In function ‘main’:
main.c:606: warning: implicit declaration of function ‘fdopen’
main.c:606: warning: initialization makes pointer from integer without a cast
Run Code Online (Sandbox Code Playgroud)
我不明白这些警告,因为返回值fopen是a FILE*.我在这里犯的错是什么?
编辑:我包括stdio.h(我也在Linux上).
在下面结构的定义中,有一个带有宏定义(#define)的行.那条线究竟做了什么?我理解它是数组的第一个条目的别名h_addr_list,但它看起来仍然很奇怪.是h_addr结构的成员hostent吗?这个定义只在结构范围内吗?
struct hostent
{
char *h_name; /* official name of host */
char **h_aliases; /* alias list */
int h_addrtype; /* host address type */
int h_length; /* length of address */
char **h_addr_list; /* list of addresses from name server */
#define h_addr h_addr_list[0] /* address, for backward compatiblity */
};
Run Code Online (Sandbox Code Playgroud) 我正在编写一个程序来模拟一个小型的物理系统,并且在写这样的东西时变得越来越恼火:
K = 0.5 * self.m * self.v**2
在上面的例子中,方程式很短且很容易理解,但是我的情况很多self,整个事情最终看起来像一团糟.我知道python总是需要self引用类成员,但有没有办法让代码看起来不像是马赛克self?
编辑:我通常做的事情如下:
var = self.var
并继续使用var而不是self.var.后来我做了:
self.var = var
但这似乎真的很愚蠢.解决这个问题的pythonic方法是什么?
我插入了一个块图像,如下所示:
[[myimage]]
image::fig1.png[align="center", title="My caption"]
Run Code Online (Sandbox Code Playgroud)
不幸的是,图像居中,但标题左对齐。我也尝试这样做:
[[myimage]]
.My caption
image::fig1.png[align="center"]
Run Code Online (Sandbox Code Playgroud)
但结果没有改变。如何使图像标题也居中对齐?
我使用此命令生成 HTML 输出(使用 xhtml11 作为后端没有区别):
asciidoc -v -a asciimath -d 文章 -b html5 -o file.html file.txt
可能重复:
"%.*s"在c中的printf中的含义是什么
我知道这个问题肯定在其他地方有问题,但搜索"%.*s"对SO没有任何意义.有人可以向我解释以下内容吗?
printf("%.*s", len, buffer);
可能重复:
C函数语法,参数列表后声明的参数类型
我浏览了一些C代码并找到了inet_pton函数的定义(在.c文件中):
int
inet_pton(af, src, dst)
int af;
const char *src;
void *dst;
...
Run Code Online (Sandbox Code Playgroud)
这里有趣的是,函数的参数以我以前从未见过的方式指定了它们的类型.在相应的头文件中,参数类型照常指定:
extern int inet_pton (int __af, __const char *__restrict __cp,
void *__restrict __buf) __THROW;
Run Code Online (Sandbox Code Playgroud)
我的问题是:这是某种C技巧吗?您是否可以始终在其范围内定义函数的参数类型?
当我编译一个使用g ++使用STL的程序时,库如何链接到我的程序?动态还是静态?
对我来说静态听起来很奇怪,因为这意味着每个使用STL的C++程序都必须在内部包含它.另一方面,动态链接声音对我来说也很奇怪,因为所有的OOP内容我都没有看到库如何动态链接并且还支持不同类型的对象......
那究竟发生了什么?
我正在尝试编写一个python脚本,它接受可选的输入参数和一个输入文件:
./script --lines 1 file.txt
应该采用1行数(--lines)然后file.txt作为输入文件.但是,getopt甚至没有看到"file.txt",因为它前面没有参数名称.
我怎样才能获得文件名?我已经考虑过使用sys.arv[-1],但这意味着当我运行时:
./script --lines 1
然后1将作为输入文件名.然后我的脚本会抛出一个错误(如果没有名为的文件1存在):
error: file '1' no found
这有效,但不是一个很好的解决方案.有没有解决的办法?
Bash 似乎将其选项集分为两种类型。我有兴趣了解其中的原因。
为了澄清,如果我运行该shopt命令,我会得到一个选项列表及其状态(开/关),但如果我运行shopt -o,我会得到一个不同的选项列表。shopt甚至( )的文档help shopt似乎也做出了这种区分:
-o restrict OPTNAMEs to those defined for use with `set -o'
Run Code Online (Sandbox Code Playgroud)
换句话说,有些选项可以用 来设置set -o,但有些选项只能用shopt命令来设置。为什么 bash 包含两组不同的选项?为什么不简单地使用该命令设置所有选项shopt?