这是我在Linux上编译的一些代码:
#include <net/if.h>
int main() {
struct ifreq ifr;
}
gcc test.c
很好
gcc -std=gnu99 test.c
很好
gcc -std=c99 test.c
失败并显示以下错误:
test.c: In function ‘main’:
test.c:4:16: error: storage size of ‘ifr’ isn’t known
不喜欢struct ifreq
Linux中C99的定义与C99有何不同?
这是预处理和GNU C vs C99的一系列后果。
首先,net/if.h
:
net/if.h
包括 features.h
struct ifreq
在一个#ifdef __USE_MISC
块内定义。所以:
__USE_MISC
啊 -这是BSD和System V共有的东西features.h
所以现在features.h
:
--std=c99
默认情况下,当您使用GCC时定义__STRICT_ANSI__
(因为这就是C99)features.h
,如果__STRICT_ANSI__
未启用BSD和System V功能,__USE_MISC
则未定义。备份至net/if.h
:struct ifreq
预处理后甚至不存在! 因此,有关存储大小的投诉 。
您可以通过以下方法了解整个故事:
vimdiff <(cpp test.c --std=c99 -dD) <(cpp test.c --std=gnu99 -dD)
或以其他任何方式(例如diff --side-by-side
)来区别它们,而不是vimdiff
。
如果您希望使用它进行干净地编译-std=c99
,则必须考虑包含_DEFAULT_SOURCE
功能测试宏(对于glibc版本> =
2.19;对于旧glibc版本,请使用_BSD_SOURCE
或_SVID_SOURCE
),以便在所提供的功能之上启用所需的功能。 C99。
问题内容: 具有函数f(x,y,z),我需要求解约束f(x,y,z)= 0,然后对其进行绘制。我试图为每对(y,z)查找f(x,y,z)= 0的值x: Python(2.7.5)说“ TypeError:fsolve:’func’参数’func’的输入和输出形状不匹配。” 但是,如果我自己进行测试,它会具有相同的形状: 返回True。 为什么fsolve()抱怨? 问题答案: 期望参数和的返回值为
[Error]org.testng.testngException:无法将@Test annotated方法[testLoginPage]与[interface java.util.Map]插入。有关本机依赖项注入的更多信息,请参阅http://testng.org/doc/documentation-main.html#native-dependent ency-injection at org
我有一个实现Iterable的类,以便用户可以使用迭代器。我使用泛型来允许用户使用任何类型并使用该类。 这是下面的工作代码,没有警告- 但是,如果我将ListIterator定义如下- 我在 Eclipse 中收到警告, 当我在类后指定泛型类型时,它为什么会抱怨?为了能够在我的类中使用Type,我不应该这样做吗?我在定义CustomStackUsingArray时添加了类型,效果很好。
问题内容: 我有一个现有项目,该项目使用@Override的方法会覆盖接口方法,而不是超类方法。我无法在代码中更改它,但是我希望Eclpse不再抱怨注释,因为我仍然可以使用Maven进行构建。 我将如何禁用此错误? 注意:由于项目要求,我需要针对Java 1.5进行编译。 问题答案: 在实现接口声明的方法的方法上使用注释仅从Java 6起有效。这是Java 5中的错误。 确保将你的IDE项目设置为
Java 7更改了排序算法,从而抛出 java.lang.IllegalArgumentException:“比较方法违反了其总合同!” 在某些情况下,当使用的比较器有故障时。是否可以确定比较器中的哪种错误导致了这种情况?在我的实验中,如果x!=x,如果x也没有关系 (如果有一个通用的规则,在比较器中寻找bug可能会更容易。但是当然最好是修复所有的bug。:-) ) 特别是,以下两个比较器没有让T
我很少使用HTML和JavaScript,几乎忘记了最基本的内容。错误是什么? DevTools未能加载SourceMap:无法加载的内容https://cdn.jsdelivr.net/npm/@tensorflow/tf。min.js。映射:HTTP错误:状态代码404,网络::错误\u HTTP\u响应\u代码\u失败