9
的端部這是一個關於C99/C11問題他們的嵌入式換行符(可以是C++太)的預處理器和它們的標準遵守。預處理多行註釋和在文件
讓我們考慮兩個源文件:
/* I'm
* multiline
* comment
*/
和
/* I'm
* multiline
* comment
*/
i_am_a_token;
如果我們用進行預處理GCC或鐺(幾個版本進行了測試)兩個文件,就會有差異。在第一種情況下,預處理器不會保留多行註釋中的換行符。在第二種情況下,所有換行符都將保留。
所有提及的標準說(地方里面的「平移階段」):
每個註釋都被一個空格字符替代。換行符保留。
爲什麼在處理文件末尾的多行註釋時存在差異?這種行爲是否符合標準?
原因聽起來不錯,但它是否允許標準或強制? – osgx
@osgx好問題 - 更新了答案。 – TMS
@osgx我同意@Tomas關於保留換行符的意圖。儘管如此,保留它們似乎只是一種可能的實現技術(丟棄它們併發出'#行'也應該起作用),所以我傾向於將其視爲標準的問題 - 它應該已經指定了效果(行號不變) ,而不是實施。 – Chris