我有一个类型的变量size_t,我想用它打印printf().我使用什么格式说明符来便携地打印它?
在32位机器上,%u似乎是对的.我编译了g++ -g -W -Wall -Werror -ansi -pedantic,并没有警告.但是当我在64位机器中编译该代码时,它会产生警告.
size_t x = <something>;
printf( "size = %u\n", x );
warning: format '%u' expects type 'unsigned int',
but argument 2 has type 'long unsigned int'
Run Code Online (Sandbox Code Playgroud)
正如预期的那样,警告会消失,如果我将其更改为%lu.
问题是,如何编写代码,以便在32位和64位机器上编译警告?
编辑:作为一种解决方法,我想一个答案可能是将变量"转换"为一个足够大的整数,比如说unsigned long,并使用打印%lu.这在两种情况下都有效.我在寻找是否还有其他想法.
我想将一些C/C++源代码插入到Microsoft Word文档中.从源文件复制代码并粘贴到Word中我没有问题.我可以做固定宽度.但是,在Word中,我看到了黑白格式的代码; 当我进入源代码编辑器时,我放松了语法高亮(对我来说,gvim).所以,我的问题是,有没有办法在MS Word中对C/C++源代码进行语法高亮?
lint产生一些警告,如:
foo.c XXX Warning 534: Ignoring return value of function bar()
Run Code Online (Sandbox Code Playgroud)
来自lint 手册
534忽略功能的返回值
'符号'(与位置比较)返回值的函数仅针对副作用调用,例如,在语句本身或逗号运算符的左侧.尝试:(void)function(); 调用函数并忽略其返回值.另请参见§5.5"标志选项"中的fvr,fvo和fdr标志.
我想在编译期间得到这个警告,如果有的话.gcc/g ++中有没有选项来实现这个目的?我打开了,-Wall但显然没有发现这一点.
我这里的代码有两个数组.它对arr []进行排序,因此最高值将在索引0中.现在第二个数组arr1 []包含字符串,我希望代码将arr []所做的任何更改应用于arr1 [].因此arr [0]将返回6,而arr1 [0]将返回字符串"d1".请注意"d1"与6的索引是否相同?排序后我想要相同的值仍然有他们的字符串对应物.
我该怎么做呢?
#include <iostream>
#include <iomanip>
#include <algorithm>
#include <functional>
using namespace std;
int main() {
int arr[ 5 ] = { 4, 1, 3, 6, 2 };
string arr1[ 5 ] = { "a1", "b1", "c1", "d1", "e1" };
std::sort( arr, arr + 5, std::greater< int >() );
cout << arr[0] << arr1[0] << endl; …Run Code Online (Sandbox Code Playgroud) 我正在使用g ++ 4.4.1并希望使用nullptr,但我无法找到需要包含哪个头文件.它似乎也不是关键字,因为我尝试使用它被拒绝了
error: 'nullptr' was not declared in this scope
Run Code Online (Sandbox Code Playgroud) 我想逐行读取一个txt文件,在读完每一行之后,我想根据选项卡"\ t"拆分该行,并将每个部分添加到结构中的元素.
我的结构是1*char和2*int
struct myStruct
{
char chr;
int v1;
int v2;
}
Run Code Online (Sandbox Code Playgroud)
其中chr可以包含多个字符.
一行应该是这样的:
randomstring TAB number TAB number NL
Run Code Online (Sandbox Code Playgroud) 我需要将C++中的字符串转换为完整的大写字母.我一直在寻找一段时间,并找到了一种方法:
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
int main()
{
string input;
cin >> input;
transform(input.begin(), input.end(), input.begin(), toupper);
cout << input;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,这不起作用,我收到此错误消息:
没有匹配函数来调用'transform(std :: basic_string :: iterator,std :: basic_string :: iterator,std :: basic_string :: iterator,
我尝试过其他方法也没用.这是最接近工作的.
所以我要问的是我做错了什么.也许我的语法很糟糕或者我需要包含一些内容.我不确定.
我在这里获得了大部分信息:http: //www.cplusplus.com/forum/beginner/75634/ (最后两篇文章)
class base
{
public:
virtual void start();
virtual void stop();
void doSomething() { start(); .... stop(); }
}
class derived : public base
{
public:
void start();
void stop();
}
Run Code Online (Sandbox Code Playgroud)
但是当我调用doSomething()派生类时,它使用它自己的定义Start()而Stop()不是派生类.
我不想doSomething()在派生类中重写,因为它与基类相同.我究竟做错了什么?
对不起,如果不清楚.
派生类中Start()和Stop()的行为是不同的(它是一个不同的机器) - 但我想使用原始基类doSomething(),因为它没有改变.它只需要使用新的派生类代码start()和stop().
我想了解boost数组.该代码可以轻松地从作者的网站上阅读.
在设计原理中,作者(Nicolai M. Josuttis)提到以下两种类型的初始化是可能的.
boost::array<int,4> a = { { 1, 2, 3 } }; // Line 1
boost::array<int,4> a = { 1, 2, 3 }; // Line 2
Run Code Online (Sandbox Code Playgroud)
在我使用g ++(版本4.1.2)的实验中,第1行正在运行但第2行则没有.(第2行产生以下结果:
warning: missing braces around initializer for 'int [4]'
warning: missing initializer for member 'boost::array<int, 4ul>::elems'
Run Code Online (Sandbox Code Playgroud)
)
不过,我的主要问题是,1号线是如何工作的?我试着编写一个类似于array.hpp的类,并使用类似于第1行的语句,但这不起作用:-(.错误是
typedef array< unsigned int, 10 > MyArray;
MyArray b = { { 1, 2, 3 } }; // Line 74
array_test.cpp:74: error: in C++98 'b' must be initialized by …Run Code Online (Sandbox Code Playgroud) 我听说过C++模板上下文中的代码膨胀.我知道现代C++编译器并非如此.但是,我想构建一个例子并说服自己.
让我们说我们上课了
template< typename T, size_t N >
class Array {
public:
T * data();
private:
T elems_[ N ];
};
template< typename T, size_t N >
T * Array<T>::data() {
return elems_;
}
Run Code Online (Sandbox Code Playgroud)
而且,假设types.h包含
typedef Array< int, 100 > MyArray;
Run Code Online (Sandbox Code Playgroud)
x.cpp 包含
MyArray ArrayX;
Run Code Online (Sandbox Code Playgroud)
并y.cpp包含
MyArray ArrayY;
Run Code Online (Sandbox Code Playgroud)
现在,我如何可以验证的代码空间MyArray::data()是相同的两个ArrayX和ArrayY?
还有什么我应该知道并从这个(或其他类似的简单)例子中验证?如果有任何g ++特定提示,我也对此感兴趣.
PS:关于臃肿,我甚至担心最轻微的臃肿,因为我来自嵌入式环境.
另外:如果模板类被显式实例化,情况是否会发生变化?