可能吗?即使用dmc编译.c和使用dmd编译.d然后将它们链接在一起,这会有效吗?我能从C代码调用D函数,共享全局变量等吗?谢谢.
我有一个C头文件(它是某些SDK的一部分),并且有一个取决于系统架构的typedef(无论是32位还是64位),如何将其传输到我的D模块?谢谢.
编辑:好的,这太简单了,我已经找到了解决方案......如果有人感兴趣,那就是:
version(X86) {
typedef int your_type;
}
version(X86_64) {
typedef long your_type;
}
Run Code Online (Sandbox Code Playgroud) 我最近开始学习Win32 API并且我讨厌匈牙利表示法(变量名中的那些愚蠢的前缀使得代码看起来很丑陋且几乎不可读),但是你可能知道它绝对是在那里的所有地方!而且这个事实导致每个人都在他们的代码中使用它来保持一致性......我想这是一个愚蠢的问题,但无论如何,我也应该这样做吗?如果我不这样做,我的代码会变得奇怪或错误吗?
我有一个动态的3d数组,目前我正在按照我在C中通常做的那样做:
for (auto i = 0; i < size; i++) {
for (auto j = 0; j < size; j++) {
for (auto k = 0; k < size; k++) {
...
}
}
}
Run Code Online (Sandbox Code Playgroud)
看起来很难看.D中是否有更短,也许更"优雅"的方式?
我正在使用https://bitbucket.org/goshawk/gdc/downloads/gcc-4.5.2-tdm-1-gdc-r575-20110723.zip与TDM GCC 4.5.2 in -v2模式来构建DLL.在我做的其中一个模块中import std.stdint.所以我认为我应该链接libgphobos2来解决这个问题,但它给了我更多的错误:
c:/mingw32/bin/../lib/gcc/mingw32/4.5.2/../../../libgphobos2.a(thread.o): In function `D4core6thread6Thread6__ctorMFZC4core6thread6Thread':
C:\crossdev\gdc\v2\build\mingw32\libphobos/../../../gcc-4.5.2/libphobos/core/thread.d:1363: undefined reference to `__emutls_v._tlsend'
C:\crossdev\gdc\v2\build\mingw32\libphobos/../../../gcc-4.5.2/libphobos/core/thread.d:1363: undefined reference to `__emutls_v._tlsstart'
C:\crossdev\gdc\v2\build\mingw32\libphobos/../../../gcc-4.5.2/libphobos/core/thread.d:1363: undefined reference to `__emutls_v._tlsstart'
C:\crossdev\gdc\v2\build\mingw32\libphobos/../../../gcc-4.5.2/libphobos/core/thread.d:1363: undefined reference to `__emutls_v._tlsend'
C:\crossdev\gdc\v2\build\mingw32\libphobos/../../../gcc-4.5.2/libphobos/core/thread.d:1363: undefined reference to `__emutls_v._tlsstart'
C:\crossdev\gdc\v2\build\mingw32\libphobos/../../../gcc-4.5.2/libphobos/core/thread.d:1363: undefined reference to `__emutls_v._tlsstart'
C:\crossdev\gdc\v2\build\mingw32\libphobos/../../../gcc-4.5.2/libphobos/core/thread.d:1363: undefined reference to `__emutls_v._tlsend'
C:\crossdev\gdc\v2\build\mingw32\libphobos/../../../gcc-4.5.2/libphobos/core/thread.d:1363: undefined reference to `__emutls_v._tlsstart'
C:\crossdev\gdc\v2\build\mingw32\libphobos/../../../gcc-4.5.2/libphobos/core/thread.d:1363: undefined reference to `__emutls_v._tlsstart'
c:/mingw32/bin/../lib/gcc/mingw32/4.5.2/../../../libgphobos2.a(thread.o): In function `thread_entryPoint@4':
C:\crossdev\gdc\v2\build\mingw32\libphobos/../../../gcc-4.5.2/libphobos/core/thread.d:173: undefined reference to `__emutls_v._tlsend'
C:\crossdev\gdc\v2\build\mingw32\libphobos/../../../gcc-4.5.2/libphobos/core/thread.d:173: undefined reference to `__emutls_v._tlsstart'
C:\crossdev\gdc\v2\build\mingw32\libphobos/../../../gcc-4.5.2/libphobos/core/thread.d:173: undefined reference to `__emutls_v._tlsstart'
c:/mingw32/bin/../lib/gcc/mingw32/4.5.2/../../../libgphobos2.a(thread.o): In …Run Code Online (Sandbox Code Playgroud) http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml?showone=Function_Names#Function_Names
常规功能有大小写; 访问器和mutator匹配变量的名称:MyExcitingFunction(),MyExcitingMethod(),my_exciting_member_variable(),set_my_exciting_member_variable().
是否隐藏了用户隐藏实现细节的整个封装点,因此他/她不知道accessor/mutator方法是否返回/修改成员变量?如果我更改变量名称或更改它存储在对象中的方式怎么办?
编辑:
如果我有一个实例变量,int foo_它似乎很简单
int foo() const { return foo_; }
Run Code Online (Sandbox Code Playgroud)
但是,如果我再补充一点返回的另一种方法foo_ + 2,应我的名字,如果bar还是GetBar?
int bar() const { return foo_ + 2; }
int GetBar() const { return foo_ + 2; }
Run Code Online (Sandbox Code Playgroud)
如果我选择GetBar并稍后决定将返回的值缓存在另一个成员变量中bar_,我是否必须将该方法重命名为bar?
我是在一家小公司从事私人 GitHub 存储库的少数开发人员之一。repo 是我们老板在他的 GitHub 帐户下创建的,所有开发人员都可以推送访问它。
您可能知道,即使您没有付费订阅,也可以分叉主存储库,分叉仍将保持私有。并且每个添加到原始 repo 的人都会自动添加到 fork 的观察者列表中(我不知道为什么)。
这是我前一段时间出于好奇所做的(我不知道我能做到这一点)并且因为我认为将我的工作中的分支和临时内容保留在主仓库之外以保留内容会很好干净的。但是今天我的老板问我为什么要这样做,除了我上面说的,我想不出一个很好的理由。
是否有充分的理由在 GitHub 上分叉私有仓库而不是直接推送到主仓库?
我正在使用GCC 4.5.2和Boost 1.46.1(编译--build-type=complete)构建一个共享库,这是来自Makefile的命令,它执行链接部分:
$(CXX) -static -lboost_filesystem -fpic -shared $^ -o $@
Run Code Online (Sandbox Code Playgroud)
一切都编译得很好但是当它被应用程序加载时我得到以下错误:
plugins/crashdetect.so: undefined symbol: _ZN5boost11filesystem34path21wchar_t_codecvt_facetEv
Run Code Online (Sandbox Code Playgroud)
ldd输出:
linux-gate.so.1 => (0x002f8000)
libstdc++.so.6 => /usr/lib/i386-linux-gnu/libstdc++.so.6 (0x00bf5000)
libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0x0032d000)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0x00506000)
/lib/ld-linux.so.2 (0x006f6000)
libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0x00110000)
Run Code Online (Sandbox Code Playgroud)
我相信这意味着它静态地联系了Boost.
这nm crashdetect.so -u | grep boost就是说:
U _ZN5boost11filesystem34path21wchar_t_codecvt_facetEv
U _ZN5boost11filesystem36detail13dir_itr_closeERPvS3_
U _ZN5boost11filesystem36detail28directory_iterator_constructERNS0_18directory_iteratorERKNS0_4pathEPNS_6system10error_codeE
U _ZN5boost11filesystem36detail28directory_iterator_incrementERNS0_18directory_iteratorEPNS_6system10error_codeE
U _ZN5boost11filesystem36detail6statusERKNS0_4pathEPNS_6system10error_codeE
U _ZN5boost6system15system_categoryEv
U _ZN5boost6system16generic_categoryEv
U _ZNK5boost11filesystem315directory_entry12m_get_statusEPNS_6system10error_codeE
Run Code Online (Sandbox Code Playgroud)
所以我认为,因为这个符号在这个列表中排在第一位,所以很可能没有什么特别之处.
我错过了什么吗?
编辑: 那么这不可能或者是什么?
我被要求使用旧的再营销跟踪代码升级现有网站,如下所示:
<script type="text/javascript">
var google_conversion_id = 12345;
var google_custom_params = window.google_tag_params; // this is empty
var google_remarketing_only = true;
</script>
<script type="text/javascript" src="https://www.googleadservices.com/pagead/conversion.js">
</script>
<noscript>
<div style="display:inline;">
<img height="1" width="1" style="border-style:none;" alt="" src="//googleads.g.doubleclick.net/pagead/viewthroughconversion/12345/?value=0&guid=ON&script=0"/>
</div>
</noscript>
Run Code Online (Sandbox Code Playgroud)
到另一种看起来像这样的方法:
<script async src="https://www.googletagmanager.com/gtag/js?id=AW-12345"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments)};
gtag('js', new Date());
gtag('config', 'AW-12345');
</script>
Run Code Online (Sandbox Code Playgroud)
因为它是异步的,不应阻止页面加载。但是,在使用较新的(基于 gtag.js 的)方法时,验证跟踪设置正确的 Google Tag Assistant 扩展会要求我输入“Feed ID”。以前,它会将再营销标签显示为绿色。
为什么现在需要它而不是旧代码?我问过有权访问 AdWords 帐户但没有 Feed ID(或找不到它...)的人。
我googleads.g.doubleclick.net/pagead/viewthroughconversion/使用基于浏览器的开发人员工具验证了请求是通过 devtools 发送的,如验证中所述:
https://developers.google.com/adwords-remarketing-tag/verification
我的配置正确吗?
这段代码:
int main(char[][] args)
{
MyObject obj;
obj.x;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
给我:Error: null dereference in function _Dmain当我用-O标志编译它时(在dmd2上)为什么?是不是obj在堆栈上分配?我应该总是new用来创建对象吗?